私は外部からGPUクラスタに接続しています。私はCUDAプログラムを実行するデバイスを選択する方法がわかりません。CUDA実行ファイルを実行する際のデバイスの選択方法は?
私はクラスタに2つのTesla GPUがあることを知っています。私はそのうちの1つを選択したいと思います。
どのようにすればいいですか?あなたのコンピュータに多くのものが接続されている場合に、どのように使いたいデバイスを選んでいますか?
私は外部からGPUクラスタに接続しています。私はCUDAプログラムを実行するデバイスを選択する方法がわかりません。CUDA実行ファイルを実行する際のデバイスの選択方法は?
私はクラスタに2つのTesla GPUがあることを知っています。私はそのうちの1つを選択したいと思います。
どのようにすればいいですか?あなたのコンピュータに多くのものが接続されている場合に、どのように使いたいデバイスを選んでいますか?
ランタイムAPIでデバイスを選択する正規の方法は、cudaSetDevice
です。それは、指定されたデバイスで遅延コンテキスト確立を実行するようにランタイムを構成します。 CUDA 4.0以前では、この呼び出しは実際にコンテキストを確立しませんでした。実行時にGPUに試してみるように伝えました。 CUDA 4.0以降、この呼び出しは呼び出し時に指定されたGPUのコンテキストを確立します。 cudaChooseDevice
もあり、利用可能なデバイスの中から、発信者から提供された基準に一致するものを見つけることができます。
cudaGetDeviceCount
で利用可能なGPUを列挙し、cudaGetDeviceProperties
を使用してその詳細を取得できます。 SDK deviceQueryの例は、これを行う方法の詳細を示しています。
ただし、ホストとドライバの設定によっては、マルチGPUシステムでGPUを選択する方法に注意する必要があります。 LinuxとWindowsの両方のTCCドライバには、GPUに「コンピューティング酷使」と表示されるオプションがあります。これは、ドライバが各GPUを一度に1つのアクティブなコンテキストに制限するか、または禁止されていることを意味します。そのデバイス上にコンテキストを確立する。コードが計算禁止デバイスまたは使用中の計算専用デバイスにコンテキストを確立しようとすると、結果は無効なデバイスエラーになります。コンピューティングの排他性を使用するポリシーである複数のGPUシステムでは、正しいアプローチは特定のGPUを試して選択するのではなく、単にレイジーなコンテキストの確立が暗黙的に起こるようにすることです。ドライバは自動的にあなたのコードを実行するための無料のGPUを選択します。 cudaGetDeviceProperties
コールを使用してcudaDeviceProp.computeMode
フィールドを読み取ると、任意のデバイスのコンピューティングモードステータスを確認できます。利用できないGPUや禁止されているGPUを自由にチェックしてそのプロパティを照会することができますが、コンテキストの確立が必要な操作は失敗します。
は、アプリケーションへのデバイスのみが表示されるように、デバイスIDのカンマ区切りのリストに環境変数CUDA_VISIBLE_DEVICES
を設定することができ、これらのcalls
のすべてのランタイムAPIドキュメントを参照してください。これを使用してデバイスをマスクするか、デバイスの表示順序を変更して、CUDAランタイムが特定の順序でそれらを列挙するようにします。
もう1つの解決策は、環境変数 'CUDA_VISIBLE_DEVICES'を使用することです。 (https://devblogs.nvidia.com/parallelforall/cuda-pro-tip-control-gpu-visibility-cuda_visible_devices/) – Soravux