2022.02.02

GPUSOROBANインスタンスにPyCUDAをインストール

はじめに

NVIDIA製GPUボードを利用するにはCUDAが必要です。一方、このCUDAはC/C++での利用しかできないため、Pythonからは直接利用できないです。それで、PyCudaをすれば、Pythonから間接的にCUDAを利用することが可能になります。下記のコマンドで、Nividia系インスタンス上に、PyCudaをインストールすることができます。*Windows10での実施例になります。

(検証に使う)インスタンスへの接続

まずはインスタンスにログインすることです。「Windows+R」キーの後に、記入枠に"cmd"と入力した上で、OKボタンを押すことで、ターミナルを立ち上げます。ターミナルでは下記の通り、ログインをします。(*ここではインスタンスのIPアドレスは10.233.101.110とします。)

ssh -L 20122:10.233.101.110:22 user@202.122.50.154 -p 30022 -i ..ssh\ackey.txt

下記の画面が見られれば、第一段のログイン成功です。

それで、もう一度 Windows+Rを実行し、"cmd"と入力し、OKボタンを押し、ターミナルを立ち上げます。そして、下記のコマンドを実行します。

ssh user@localhost -p 20122 -i .ssh/mykey.txt

下記の画面が見られれば、ログインプロセスは完了です。

PyCUDAのインストール

インストールする前に、まずはおまじないとして、下記のコードを実施します。

sudo apt update && sudo apt upgrade

動作完了時、だいたい下記の画面になります。

それで、下記のコマンドを実行してください。

pip install pycuda

インストールする際の画面はこんな感じです。1~2分かかりますので、少しお待ちください。

インストールが無事に完了した場合、下記の画面になります。

PyCudaのバーションチェックは下記のコマンドで実行することで、チェックできます。

pip show pycuda

PyCUDAの動作確認

下記のコードを実行してエラーがなければ、PyCudaが動作していることを確実に確認できます。

import pycuda
import pycuda.driver as drv
drv.init()
print('CUDA device query (PyCUDA version) \n')
print('Detected {} CUDA Capable device(s) \n'.format(drv.Device.count()))
for i in range(drv.Device.count()):
        
    gpu_device = drv.Device(i)
    print('Device {}: {}'.format( i, gpu_device.name() ) )
    compute_capability = float( '%d.%d' % gpu_device.compute_capability() )
    print('\t Compute Capability: {}'.format(compute_capability))
    print('\t Total Memory: {} megabytes'.format(gpu_device.total_memory()//(1024**2)))
                            
# The following will give us all remaining device attributes as seen 
# in the original deviceQuery.
# We set up a dictionary as such so that we can easily index
# the values using a string descriptor.
                                                
    device_attributes_tuples = gpu_device.get_attributes().items() 
    device_attributes = {}
                                                            
    for k, v in device_attributes_tuples:
        device_attributes[str(k)] = v 
        num_mp = device_attributes['ASYNC_ENGINE_COUNT']


# Cores per multiprocessor is not reported by the GPU!  
# We must use a lookup table based on compute capability.
# See the following:
# http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#compute-capabilities
                                                                                                            
cuda_cores_per_mp = { 5.0 : 128, 5.1 : 128, 5.2 : 128, 6.0 : 64, 6.1 : 128, 6.2 : 128, 8.0: 128}[compute_capability]
                                                                                                                    
print('\t ({}) Multiprocessors, ({}) CUDA Cores / Multiprocessor: {} CUDA Cores'.format(num_mp, cuda_cores_per_mp, num_mp*cuda_cores_per_mp))
device_attributes.pop('MULTIPROCESSOR_COUNT')
for k in device_attributes.keys():

	print('\t {}: {}'.format(k, device_attributes[k]))

上記のコードをtest_pycuda.pyとして保存して頂き、その後、sudo python3 test_pycuda.py で実行すると、実行結果は下記の通りになります。実行してエラーがなければ、下記の結果が見られれば、成功とのことです。

sudo python3 test_pycuda.py

まとめ

ここまで確認できたら、PyCUDAのインストールが無事に終えたことを確認できたので、お疲れ様でした。

いかがでしたでしょうか。
弊社クラウドGPUサーバのご利用をご検討中の方はhttps://soroban.highreso.jp/から
お気軽にお申込みやお問い合わせください。

初回インスタンス作成から
3日間は無料利用可能!

新規申し込み