自作PCの備忘録を残します.
最終的に,Ubuntuをインストールしてdockerでディープラーニング環境を作るところまでを記します.
目次
- 自作PCの作り方を調べる
- PCを組み立てる
- 環境構築
1. 自作PCの作り方を調べる
- 以下のサイト様を参考にさせていただきました.
用途に応じてスペックを決めるのが良いようです.
- 前処理を頻繁に実行するので,CPUのコア数は多めに
- GPUを増設したくなったときのために,大きめの電源とケースにしておく
検討した結果,次のような構成にしました.
作ったもの
CPU Core i7-9700K 45,000円
GPU GeForce RTX2080Ti 11GB GamingPro OC 89,000円(中古)
マザーボード ASUS PRIME Z390-A 22,000円
メモリ Kingston FURY RGB(DDR4 2666MHz 16GBx2) 20,000円
ケース O11 DYNAMIC WHITE 14,000円
電源 Corsair HX1000i 25,000円
SSD Intel SSD 660P 13,000円
HDD SEAGATE ST6000DM003 11,000円
簡易水冷ファン [Novonest CC240RGB]
(https://www.amazon.co.jp/gp/product/B07JFVV9VB/ref=ppx_yo_dt_b_asin_title_o01_s00?ie=UTF8&psc=1) 7,000円
無線LANカード Ziyituod ZYT-WIE9260 4,000円
ケースファン Ubanner RB001 4,500円
合計 254,500円
※最後のケースファンはLEDで楽しむためのものなので,特に必要ありません.
下調べをあまりせず「えいや!」で買ってしまいましたが,後述のようにもっと調べるべきでした.
その他買ったもの
RGBファンのコントローラ Fractal Design Adjust R1 3,000円
これは,アドレサブルRGBという規格に対応していないマザーボードを買ったにも関わらず,アドレサブルRGBの簡易水冷ファンを買ったせいで買う羽目になったものです.(同じ失敗をしないようご注意を…)
熱伝導グリス ThermalGrizzly 750円
検討したこと・反省点
-
コア数だけ見るとXeonやThreadripperもあるようですが,とても手が出ませんでした.
-
Intel 9900kやRyzen 3900Kも検討しましたが,価格や冷却を考慮する必要がありそうでしたので,楽そうなCore i7にしました.
-
GPUを中古で買うのは推奨されていないので,新品を買うべきでした….多少のリスクは受け入れつつ,人柱になったつもりで使い続けてみます.
-
GPUは上を見ればTitan RTX, Tesla V100などありますが,高額だし私には使い切れる気がしません.
-
正直,ディープラーニングを回すだけならもっと安く作れたはずです.
- 簡易水冷をやめて空冷にする
- メモリを普通の(光らない)ものにする
- CPU, GPUをコスパのよいものにする
- GPU1枚を前提にして,電源やケースを小さめのものにする
- SSDの容量を減らす
等々,色々無駄が省けそうです.
2. PCを組み立てる
マザーボードの説明書を熟読しつつ,こちらを参考に組み立てました.
- CPUをマザボに取り付け
- CPUクーラー(今回は簡易水冷)をマザボに取り付け
- メモリの取り付け
- SSDの取り付け
- 電源を繋いで動作確認
- ケースにマザボを取り付け
- ケースに水冷ファンを取り付け
- 電源の取り付け
- HDDの取り付け
- GPUの取り付け
- 無線LANカードの取り付け
- ケースファンの取り付け
- 配線
- 電源を入れて動作確認(CPU温度やファン回転数が正常値に収まることを確認)
- 綺麗なLEDに満足してビール飲んで寝る
3. 環境構築
3.1 Ubuntu 18.04.4 LTSをインストール
-
こちらを参考にインストールしました.
-
最初,モニタをグラボの端子に接続させてUbuntuを起動させると画面がフリーズしてしまいました.
-
なので,最初はマザボの端子に繋いでおくか,nouveauを無効化させておきます.
3.2 グラフィックドライバのインストール
Ubuntuを日本語でインストールした場合は,ドキュメントなどの日本語を英語に直しておきます.
LANG=C xdg-user-dirs-gtk-update
パッケージを更新
sudo apt-get update
sudo apt-get upgrade
NVIDIAドライバダウンロードから対応するドライバを選択してダウンロード
sudo apt-get install build-essential
ドライバのインストール中にグラフィックドライバが落ちることがあるので,念のためCtrl+Alt+F1
でCUIに切り替えます.(Ctrl+Alt+F2
などで切り替わる場合もあるようです.それでもダメならファンクションキーを3~12に変えてみる)
この時, --no-opengl-files, --no-libglx-indirect, --dkmsを指定します
--noうんたら
の指定が足りないとログインループにハマったり,--dkms
が足りないと再起動するたびにnvidia driverが無効になったりします.
chmod +x ./NVIDIA-Linux-x86_64-440.31.run
sudo ./NVIDIA-Linux-x86_64-440.31.run --no-opengl-files --no-libglx-indirect --dkms
reboot
(モニタをマザボに接続している場合は,グラボの端子に繋ぎ変える.)
nvidia-smi
GPUの情報が表示されれば完了
3.3 dockerインストール
公式にしたがってインストール.2019年11月4日時点では以下のコマンドを実行しました.
sudo apt-get update
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
sudoなしでdockerコマンドを実行する設定もしておきます.
sudo groupadd docker
sudo gpasswd -a $USER docker
sudo service docker restart
reboot
3.4 nvidia-dockerインストール
NVIDIA Container Toolkitにしたがってインストール.
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
sudo systemctl restart docker
以下のコマンドでGPUの情報が見えたら成功です.
docker run --gpus all --rm nvidia/cuda nvidia-smi
3.5 dockerイメージで動作確認
tensorflow公式のdocker imageを動かしてみます.
docker pull tensorflow/tensorflow:1.14.0-gpu-py3-jupyter
docker run --gpus all -it --rm -v $(realpath ~/notebooks):/tf/notebooks -p 8888:8888 tensorflow/tensorflow:1.14.0-gpu-py3-jupyter
jupyterが起動したらブラウザでlocalhost:8888
に接続
tensorflowからGPUが見えているか確認します
from tensorflow.python.client import device_lib
print(device_lib.list_local_devices())
以下のようにGPUが見えていれば成功です.
[name: "/device:CPU:0"
device_type: "CPU"
memory_limit: 268435456
locality {
}
incarnation: 14740279898702566726
, name: "/device:XLA_GPU:0"
device_type: "XLA_GPU"
memory_limit: 17179869184
locality {
}
incarnation: 10721268506091676345
physical_device_desc: "device: XLA_GPU device"
, name: "/device:XLA_CPU:0"
device_type: "XLA_CPU"
memory_limit: 17179869184
locality {
}
incarnation: 16980550380766421160
physical_device_desc: "device: XLA_CPU device"
, name: "/device:GPU:0"
device_type: "GPU"
memory_limit: 10512030106
locality {
bus_id: 1
links {
}
}
incarnation: 10531017116676756003
physical_device_desc: "device: 0, name: GeForce RTX 2080 Ti, pci bus id: 0000:01:00.0, compute capability: 7.5"
]
3.6 MNIST
いよいよディープが回せます!
簡単なCNNでMNISTを回してみます.
!pip install keras
import keras
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense, Dropout, Flatten, MaxPooling2D, Conv2D
from keras.callbacks import TensorBoard
(X_train,y_train), (X_test, y_test) = mnist.load_data()
X_train = X_train.reshape(60000,28,28,1).astype('float32')
X_test = X_test.reshape(10000,28,28,1).astype('float32')
X_train /= 255
X_test /= 255
n_classes = 10
y_train = keras.utils.to_categorical(y_train, n_classes)
y_test = keras.utils.to_categorical(y_test, n_classes)
model = Sequential()
model.add(Conv2D(32, kernel_size=(3,3), activation='relu', input_shape=(28,28,1)) )
model.add(Conv2D(64, kernel_size=(3,3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.5))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(n_classes, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
import time
start = time.time()
model.fit(X_train, y_train, batch_size=128, epochs=15, verbose=1,
validation_data=(X_test,y_test))
elapsed_time = time.time() - start
print ("elapsed_time:{0}".format(elapsed_time) + "[sec]")
elapsed_time:65.47733306884766[sec]
Google ColaboratoryのGPUはランダムに割り当てられるのですが,P100を引いたときは62秒でした.
20万以上使ったPCが,無料のColaboratoryに負けてしまうのは悲しい気もしますが,時間制限もありませんし,レスポンスも早く,好きに拡張できるのは大きなメリットになりそうです.