0

私は CDH4 を使用しており、JOCL を使用してマッパー クラスの cleanup() メソッドから GPU にアクセスしようとしています。(注: 私の通常のコード (map reduce なし) は GPU で正常に動作します)。

map-reduce コードを実行すると、エラーがスローされます (以下に指定)。

attempt_201309171647_0021_m_000000_1: No protocol specified
attempt_201309171647_0021_m_000000_1: No protocol specified
13/09/20 18:03:01 INFO mapred.JobClient: Task Id : attempt_201309171647_0021_m_000000_2, Status : FAILED
org.jocl.CLException: CL_DEVICE_NOT_FOUND
    at org.jocl.CL.checkResult(CL.java:569)
    at org.jocl.CL.clGetDeviceIDs(CL.java:2239)
    at com.testMR.jocl.WordCountMapper.cleanup(WordCountMapper.java:106)
    at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:142)
    at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:672)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:330)
    at org.apache.hadoop.mapred.Child$4.run(Child.java:268)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:396)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1408)
    at org.apache.hadoop.mapred.Child.main(Child.java:262)
******************************************************************************

各マップ タスクは、「プロトコルが指定されていません」というエラーをスローします。これは何を意味するのでしょうか ?マッパークラスで使用されるプロトコルは何ですか?

よろしく

4

1 に答える 1

0

OSのグラフィックデバイスに問題がありました。

私たちはそれを解決しました:-)

私たちが抱えていた問題は、Hadoop で実行されている AMD OpenCL コードにありました。MapReduce コードは GPU カードにアクセスできませんでした。GPU コンピューティング リソースを使用するには、X サーバーが提供する GUI サービスが必要でした。

私が理解していることから、AMD OpenCL コード (root 以外のユーザー向け) は、X サーバー ( http://en.wikipedia.org/wiki/X_Window_System )にアクセスしないと実行できません。

このスレッドhttp://devgurus.amd.com/thread/160838によると、 AMD は OpenCL を X サーバーなしで動作させることに取り組んでいます。

Hadoop で実行する OpenCL コードを取得するために私が見つけたソリューションは、このスレッドhttp://devgurus.amd.com/message/1284840から採用されており、GUI なしで ssh ログインを介して OpenCL コードを実行する手順を提案しています。

私が従った手順は次のとおりです。

  1. 「chsh lightdm」コマンドを使用して「lightdm」ユーザーのシェルを編集し、/bin/bash に設定します。

    $sudo chsh lightdm
    

    プロンプトが表示されたら、次のように入力します: /bin/bash

  2. /etc/rc.local を開き、次の行を 'exit 0' の前に追加します。

    su -l lightdm -c "sleep 30 ; export DISPLAY=:0 ; xhost +local:"
    
  3. ファイル /etc/profile.d/compute.sh を作成し、以下を内部に追加します (そして 'chmod 755 /etc/profile.d/compute.sh' を実行します):

    #!/bin/sh
    
    export COMPUTE=:0
    
    #export DISPLAY=:0
    
    #export GPU_MAX_ALLOC_PRCENT=100
    
    #export GPU_MAX_HEAP_SIZE=100
    
    if [ ! -z "$DISPLAY" ]; then
    
        xhost +local:
    
    fi
    
  4. 上記のコメントアウトされたエントリは、このセットアップが機能しなかった場合に他のものをテストするためのものですが、私たちにとっては機能しました

  5. 上記のスクリプトに権限を付与します

    $sudo chmod 755 /etc/profile.d/compute.sh
    
  6. lightdm にログイン/ログアウトすると X セットアップがリセットされるため、/etc/lightdm/lightdm.conf に以下を追加しました。

    greeter-show-manual-login=true
    
    greeter-setup-script=/etc/profile.d/compute.sh
    
    session-setup-script=/etc/profile.d/compute.sh
    
  7. システムを再起動して、すべてのユーザー (mapred を含む) に対して環境変数が設定されるようにします。これで、Hadoop から OpenCL コードを実行できるようになります。

于 2013-09-24T10:23:18.030 に答える