scpコマンドでポート指定をしたファイル転送
scpは通常
$ scp -r 転送するファイル 転送先
(転送するファイル、転送先はローカルパス、あるいはユーザー@ホスト:リモートパス)
ポートを指定する場合は
$ scp -P ポート番号 -r 転送するファイル 転送先
dockerコンテナを別のマシンに移動するには
dockerコンテナを別のマシンに移動したいときに行うことを記述する。
私はこちらのサイトを参考にした。
流れは以下の通りだ。(赤文字は人によって異なる)
①dockerコンテナからdocker imageを作成する
$ docker commit my_docker_container my_docker_image
②docker imageをtarファイルとして保存する
$ docker save my_docker_image > my_docker_image.tar
③tarファイルを別のマシンに転送する
scp my_docker_image.tar machine2@xxx.xxx..xxx.xxx:/home/username/dir1
この作業には時間がかかる場合があるのでバックグラウンドでやることも可能。
以下のページでscpをバックグラウンドで実行する方法を載せている。
バックグラウンドでscpの処理を行う - jskangarooのブログ
④別のマシンでtarファイルからdocker imageをロードする
$ docker load < my_docker_image.tar
⑤ロードしたdocker imageからコンテナを作成する
$ docker run --gpus all --name my_docker_container --mount type=bind,source=/home/username/dir1,target=/mnt -it my_docker_image /bin/bash
(,後にスペースがない事に注意)
docker: Error response from daemon: could not select device driver "" with capabilities: [[gpu]].エラーの対処法
dockerコンテナを作成しようとした際、以下のようなエラーが出た。
docker: Error response from daemon: could not select device driver "" with capabilities: gpu.
ERRO[0000] error waiting for container: context canceled
これは「NVIDIAドライバーがDockerを認識できていないか、nvidia container tools をインストールしたけどDockerのデーモンを再起動していない場合に起きる」と以下のサイトに書いてあった。
ただし、自分の解決方法はこのサイトとは異なった。
自分はnvidia公式サイトのSetting up NVIDIA Container Toolkitを参照した。
https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html#docker
$ 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
$ curl -s -L https://nvidia.github.io/nvidia-container-runtime/experimental/$distribution/nvidia-container-runtime.list | sudo tee /etc/apt/sources.list.d/nvidia-container-runtime.list
$ sudo apt-get update
$ sudo apt-get install -y nvidia-docker2
$ sudo systemctl restart docker
$ sudo docker run --rm --gpus all nvidia/cuda:11.0-base nvidia-smi
$ nvidia-smiの出力があれば、上手くいっている。
CUDA環境が壊れたため入れ直した際の手順(Ubuntu 20.04)
PCをシャットダウンし、つけ直すと、CUDAの環境が壊れてしまった。
PCはUbuntu 20.04。
具体的には以下のような状況だった。
・nvidia-smiのコマンドは正常に動く。
・nvcc -VはCommand 'nvcc' not foundになる。
・/usr/local/ ディレクトリを確認すると、あるはずのcudaディレクトリが無い。
補足をすると、
$ nvidia-smiはnvidiaドライバーの情報である。
このコマンドで表示されるCUDA Versionはドライバーが対応している最大のCUDA Versionである。
一方、$ nvcc -VはCUDA Tookkitのバージョン、つまりCUDAのバージョンが表示される。
よって、CUDAを入れ直す必要があった。
その際、以下のサイトを参考にした。
https://qiita.com/yukoba/items/c4a45435c6ee5d66706d
行ったこと:
sudo apt update
sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub
wget wget http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-repo-ubuntu1804_10.2.89-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu1804_10.2.89-1_amd64.deb
sudo apt update
sudo apt install cuda cuda-drivers
sudo reboot
rm cuda-repo-ubuntu1804_10.2.89-1_amd64.deb
vim ~/.bashrc
ファイルの末尾に以下の2行を追加する
export PATH="/usr/local/cuda/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda/lib64:$LD_LIBRARY_PATH"
sudo reboot
これでCUDAが入った。
参考したサイトにはその後もcuDNNのインストールの手順が載っているが、それは行わなかった。
これでpytorchなどが使えるようになった。
module 'cupy' has no attribute 'util' エラーの対処法
module 'cupy' has no attribute 'util'
というエラーはcupyのバージョンによって発生する。
例えばver. 9.0ではこのエラーが確認できた。
これはバージョンを下げることで解決できる。
pip install cupy==6.1.0
の様に古めのバージョンを指定するとよい。
6.1と7.0ではこのエラーが発生しないことを確認済み。