前準備: harvester GUIでの設定

ログイン設定

後々にVMを作った際にユーザー名とパスワードを決めておかないとログインできません。そこでCloud configuration templeteにVMの情報のテンプレートを作っておきます。また、SSHでアクセスするための設定もここに書いておきます。大体こんな感じで書けば良いです。(調整に丸一日費やした)。また、画像は割愛しますが、AdvancedのSSH keysにも同じ内容の公開鍵を登録しておきます。

VMからGPUへアクセスするための設定

AdvancedのPCI Devicesには様々なPCI接続されたデバイスがあります。このうちNvidiaで検索して引っかかったものをかたっぱしからEnabledに変更すると良いでしょう。これをやっておかないとVMを作った後に苦しみます。

ネットワークの設定

後々にSSHでアクセスするためには静的にアドレスを振っておくと都合が良いです。左側のNetworksからVirtual Machine Networksを選択してCreateを押し, Basicsを以下のようにしましょう。またRouteでは静的なアドレスとGatewayを指定します。

VM用imageファイルを取得する

VMを作るには, その元となるイメージが必要です。AWSでもUbuntuだったりAmazon Linuxだったりが選べますが, 自作する場合でも同じです。ここで必要になるのはUbuntuのイメージファイルなのですが, 公式のUbuntu24.04などはVM用に最適化されておらず, 起動後に複雑な設定が必要になります。しかも, うまく動かないこともザラです。そこで, cloudに最適化されたUbuntu imageを使用します (https://cloud-images.ubuntu.com/releases/22.04/release/ubuntu-22.04-server-cloudimg-amd64.img)。 harvesterのGUIからimage->createと進んで, URLを記入してください。これでcreateすれば, GUI側でイメージをDLして使用できるようにしてくれます。

VMの初期設定

VMの構成

まずは左側のVirtual Machinesをクリックして右上のCreateボタンを押します。

VMの名前, CPU数, メモリ数, そしてSSHKeyを記入しましょう

Volumesからimageとsizeを記入しましょう

Networksでbr0を指定してbridge接続にしましょう

Node Schedulingで2つ目の選択肢を指定しましょう

PCI devicesでGPUを追加しましょう

Advanced OptionsのCloud Configuration: User Dataに作っておいたTemplateを適用しましょう

あとはCreateボタンを押せばOKです。

VSCodeのRemoteSSHを使ってアクセス

VMができたら, まずはpingでVMのアドレスに対して送信して, 応答が来るかを確認しましょう。pingが返ってきているならば, 次はsshで接続します。

ssh -i .\id_rsa ubuntu@192.168.0.1

これもうまくいったら、最後に~/.ssh/configに以下を書き込んでRemoteSSHしましょう。

Host vm
  HostName 192.168.0.1
  User ubuntu
  IdentityFile ~/.ssh/id_rsa
  IdentitiesOnly yes

Tensorflow環境の構築

VMからGPUを認識させるために

まずはnvidia-smiを成功させるための事前準備を行います。

sudo apt update
sudo apt install -y build-essential dkms linux-headers-$(uname -r) curl ubuntu-drivers-common
ubuntu-drivers devices

ここでnvidiaのdriverを選択してインストールするのですが、ubuntu-drivers devicesで出てきた中で新しいdriverであることと、server用途であること、そしてopenソースであることが条件になります。(ここで1週間くらい苦しんだ)。GeForce RTX5060Dualだと以下のコマンドで行けます。

sudo apt install -y nvidia-driver-575-server-open
sudo reboot

参考までにserverやopenを指定しなかった場合のエラーメッセージも載せておきます。これはdmesg|grep -i nvidiaをした際のものです。

nvidia: loading out-of-tree module taints kernel
nvidia: module license 'NVIDIA' taints kernel
nvidia: module verification failed: signature and/or required key missing - tainting kernel
nvidia-nvlink: Nvlink core is being initialized, major device number 234
nvidia 0000:0a:00.0: vgaarb: changed VGA decodes: oiddecodes=io+mem, decodes=none:owns=none
NVRM: loading NVIDIA UNIX x86_64 kernel module 575.64.03 Wed Jun 25 18:40:52 UTC 2025
nvidia-modeser: Loading NVIDIA kernel Mode Setting Driver for UNIX platforms 575.64.03 Wed Jun 25 18:07:15 UTC 2025
[drm][nvidia-drm][GPU ID 0x0000a00] Loading driver
NVRM: The NVIDIA GPU 0000:0a:00.0 (PCI ID: 10de:2d05)
NVRM: installed in this system requires use of the NVIDIA open kernel modules
[drm:nv_drm_load[nvidia_drm]] *ERROR* [nvidia-drm] [GPU ID 0x00000a00] Failed to allocate NvKmsKapiDevice
[drm:nv_drm_register_drm_device[nvidia_drm]]*ERROR*[nvidia-drm][GPU ID 0x00000a00] Failed to register device
nvidia_uvm: module uses symbols from proprietary module nvidia, inheriting taint.
audit: type=1400 audit(1754492854.916:3):apparmor="STATUS" operation="profile_load" profile="unconfined" name = "nvidia_modprobe" pid=607 comm=apparmor_parser"
NVRM: The NVIDIA GPU 0000:0a:00.0 (PCI ID: 10de:2d05)
NVRM: installed in this system requires use of the NVIDIA open kernel modules
nvidia-smi

CUDAのインストール

CUDAのバージョンはGPUによって決まっているので, CUDAの公式サイトから対応するバージョンを見つける作業が別途必要です。今回はCUDA12.9が該当していたので, 以下のようにして導入しました。不安な方は公式サイトを読んで同じことをしてください。

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb
sudo apt-get update
sudo apt-get -y install cuda-toolkit-12-9
cat << 'EOF' >> ~/.profile
PATH=/usr/local/cuda/bin:$PATH
LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
EOF

harvesterのGUI環境(VNC)だとEnglish キーボードになっているため~が入力できない。この場合は~の代わりに$HOMEを入れてあげればうまくいく

sudo reboot

再起動後に以下のコマンドを打ってうまく表示されたら成功

nvcc -V

サンプル実行

CUDAが本当に使えるか確認するためにサンプルを実行してみましょう。まずサンプルをビルドするためのcmakeから入れていきます。

sudo apt install cmake
git clone https://github.com/NVIDIA/cuda-samples.git
cd cuda-samples
mkdir build && cd build
cmake ..
make -j 10

ビルドには10分くらいかかりました。CPU6個メモリ32GBのVMでです。さて、次にサンプルを実行してみます。

cd Samples/6_Performance/UnifiedMemoryPerf
./UnifiedMemoryPerf

実行すると以下のような数値が表示されます。なお、実際はもう少し遅かったです。

GPU Device 0: "Blackwell" with compute capability 12.0

Running ........................................................

Overall Time For matrixMultiplyPerf 

Printing Average of 20 measurements in (ms)
Size_KB  UMhint UMhntAs  UMeasy   0Copy MemCopy CpAsync CpHpglk CpPglAs
4         0.168   0.164   0.358   0.014   0.029   0.018   0.032   0.018
16        0.190   0.200   0.538   0.043   0.047   0.089   0.041   0.034
64        0.263   0.301   1.009   0.178   0.093   0.085   0.086   0.073
256       0.723   0.752   1.620   0.951   0.332   0.268   0.260   0.258
1024      2.249   2.025   2.998   9.376   1.687   1.663   1.120   1.137
4096      8.022   7.383  11.160  95.890   6.886   7.047   5.011   4.926
16384    34.911  32.620  47.920 952.183  30.725  31.063  26.371  26.344

NOTE: The CUDA Samples are not meant for performance measurements. Results may vary when GPU Boost is enabled.

Cudnnのインストール

Tensorflowのインストールまでだいぶ近づいてきました。ここでCudnnのインストールを行います。Cudnnは公式サイトに行くと, どのような手順でインストールすれば良いか書いてあるので, それに従います。ここでも同じ内容を記しておきます。

wget https://developer.download.nvidia.com/compute/cudnn/9.11.0/local_installers/cudnn-local-repo-ubuntu2204-9.11.0_1.0-1_amd64.deb
sudo dpkg -i cudnn-local-repo-ubuntu2204-9.11.0_1.0-1_amd64.deb
sudo cp /var/cudnn-local-repo-ubuntu2204-9.11.0/cudnn-*-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get -y install cudnn

sudo apt-get -y install cudnn-cuda-12

Tensorflowのインストール

とりあえず怖いので仮想環境を作っておきます。

sudo apt install python3-venv -y
python3 -m venv tf-gpu-env
source tf-gpu-env/bin/activate

そうしたらtensorflowをインストールします。これも公式サイトを見ながら最新版をDLすれば良いと思います。

pip install --upgrade pip
wget https://github.com/bazelbuild/bazelisk/releases/download/v1.26.0/bazelisk-amd64.deb
sudo apt install ./bazelisk-amd64.deb

wget https://github.com/llvm/llvm-project/releases/download/llvmorg-17.0.2/clang+llvm-17.0.2-x86_64-linux-gnu-ubuntu-22.04.tar.xz
tar -xvf clang+llvm-17.0.2-x86_64-linux-gnu-ubuntu-22.04.tar.xz

sudo cp -r clang+llvm-17.0.2-x86_64-linux-gnu-ubuntu-22.04/* /usr

git clone https://github.com/tensorflow/tensorflow.git
cd tensorflow
./configure
bazel build //tensorflow/tools/pip_package:wheel --repo_env=USE_PYWRAP_RULES=1 --repo_env=WHEEL_NAME=tensorflow --config=cuda --config=cuda_wheel

最後に以下のコードをtest.pyとでも名付けて実行してみてGPU数が1と表示されれば成功です。

import tensorflow as tf
print(tf.__version__)
print("Num GPUs Available:", len(tf.config.list_physical_devices("GPU")))

Leave a Reply

Your email address will not be published. Required fields are marked *