Contents
前準備: 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")))