Closed2

動かして学ぶAI・機械学習の基礎のメモ

esakaesaka

環境もろもろ用意

GPUサーバとPython系のインストール

GCPでGPUサーバ立ち上げ

Quotaの引き上げ

デフォだとGPUインスタンス立てれない

GCPアカウントはある前提で、
サービスメニューのIAM&Admin -> Quotasを開く

下記2つがデフォだと0のはずなので、1以上に引き上げリクエストを行う

これで数分待って承認されれば、東京リージョンでT4 GPU持ちのインスタンスを立てれる

GPUインスタンス起動

上記の設定で

Boot diskも変更する、CUDAやNvidia Driverインストールがめんどくさいので最初から入ってるやつを選んでおく

接続確認と、VS Codeから開く

インスタンス起動したら、SSH -> View gcloud commandで表示されたSSHコマンドをローカルのターミナルから実行してアクセスできること確認

$ gcloud compute ssh --zone "asia-northeast1-a" "インスタンス名"  --project "プロジェクト名"

できたら、exitで戻って

$ gcloud compute config-ssh --project "プロジェクト名"

を実行、~/.ssh/configに上記インスタンスへの接続情報が追加される
で出力された
ssh <インスタンス名>.<ゾーン名>.<プロジェクト名>でログインできることを確認しておく

そしたら、VS Code開いて、

Remote Developmentの拡張機能入れてなければ、入れておく
-> https://code.visualstudio.com/docs/remote/remote-overview

そしたら、Remote ExplolerのSSH targetはデフォで、~/.ssh/configを読み込んでるはずなので、接続先候補に、作成したインスタンス情報があるはず、それにつなげてファイル編集できることを確認する

Pythonやらライブラリ基本的なの入れておく

bootdiskでgpuのを選んでると、デフォでpython3.7, pipなどが入ってるので、tensorflowを入れれば始めれる

https://www.tensorflow.org/install/pip#linux
公式手順に則って実施

conda install -c conda-forge cudatoolkit=11.2 cudnn=8.1.0
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CONDA_PREFIX/lib/
python3 -m pip install tensorflow

最後の

# Verify install:
python3 -c "import tensorflow as tf; print(tf.config.list_physical_devices('GPU'))"
...
# 以下の出力でればOK
[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]

一応bashrcにもパスを追加しておく

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CONDA_PREFIX/lib/

これで、1章のサンプルコードを書く

import tensorflow as tf
import numpy as np

# 以下2行のimport方法は書籍から少し変えてる、下記の書き方じゃないとVSCodeが解決できなかった(実行自体は書籍のままでできる)
from tensorflow.python.keras import Sequential
from tensorflow.python.keras.layers import Dense


model = Sequential([Dense(units=1, input_shape=[1])])
model.compile(optimizer='sgd', loss='mean_squared_error')

xs = np.array([-1.0, 0.0, 1.0, 2.0, 3.0, 4.0], dtype=float)
ys = np.array([-3.0, -1.0, 1.0, 3.0, 5.0, 7.0], dtype=float)

model.fit(xs, ys, epochs=500)

print(model.predict([10.0]))

で実行

$ python main.py
....
Epoch 500/500
1/1 [==============================] - 0s 2ms/step - loss: 7.2057e-05
[[18.975235]]

OK

ちなみに実行中別ターミナルでnvidia-smiして

$ nvidia-smi
Sun Sep 18 10:06:45 2022
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 510.47.03    Driver Version: 510.47.03    CUDA Version: 11.6     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  Tesla T4            Off  | 00000000:00:04.0 Off |                    0 |
| N/A   58C    P0    28W /  70W |  14019MiB / 15360MiB |      4%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|    0   N/A  N/A     28937      C   python                          14017MiB |
+-----------------------------------------------------------------------------+

プロセスにちゃんと出てくるか(GPUが使われてるか確認しておくと尚良い)

esakaesaka

ゲーミングPCを購入したのでwindows上で環境を再構築した

  1. Nvidia Driverインストール
  2. WSL2でUbuntuインストール(2022/12時点で最新のNvidia DriverはWSLからも利用可能
  3. Ubuntu内でtensorflow_gpu==2.10.0に対応しているcuda==11.2, cuDNN=8.1.1をインストール
  4. Anacondaを入れて、pip install tensorflow_gpu==2.10.0
  5. その後起動確認すると、tensorflowが利用しようとする動的ライブラリ(.soファイル)の名前(version?)が微妙に違うので、シンボリックリンクを貼り直してく
    • libcudart.so.11.0をtensorflowは求めるけど、入ってるのはlibcudart.so.12.0なので
    • ln -s libcudart.so.12.0 libcudart.so.11.0という感じで、Errorが出るライブラリ全部に対して実施する

ここまでやると動いた

このスクラップは2023/08/05にクローズされました