M1 Macのdocker desktopを利用したimage作成ができない問題について
M1 Macでもdockerが使えるようになったが、imageを作成しようとした際につまずいたのでそのメモ
環境
- MacBook Pro (13-inch, M1, 2020)
- macOS Big Sur (version 11.4)
- docker desktop 3.3.3 (64133)
- engine 20.10.6
~~ 追記 ~~ (2021/06/25): Docker Desktop 3.5.0 (3.5.0.5309)で以下の設定をせずとも(Use new virtualization framework
のチェックあり)イメージのbuildできることを確認しました。
問題:imageをpullするとError response from daemon:
のエラーが出て、失敗する。
- シンプルに
ubuntu:18.04
のイメージをpullしてみる。
$ docker pull ubuntu:18.04 Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
やってみたこと
- (プロキシ環境ではないので、プロキシ関連の設定はしない)
- ターミナルからdocker login
- loginできず
解決法
- dockerの設定アイコンから、Experimental Featuresの
Use new virtualization framework
のチェックを外す。
参考
nvidia-dockerのための,nvidia driver, cudaのインストール・更新方法 2020.12版
GPUの最新のドライバは配布されているのか?確認とインストール方法
- 前提: Nvidia-driverとCUDAバージョンの関係を確認
方法A: NVIDAIドライバダウンロードサイト
- DLサイト
- 上記サイトで検索すると最新バージョンが確認できる。DLは~.runファイル
- .runファイルのインストールはいろいろ設定ファイルをいじる必要があり面倒そう→断念 (https://qiita.com/ozota/items/28b7e1fbf5015f907638)
方法B: Ubuntu公式aptの利用
$ add-apt-repository ppa:graphics-drivers $ apt-get update $ ubuntu-drivers devices # インストールできるものを確認 // installする場合には $ apt-get install nvidia-XXX # ①
- その後, 対応バージョンのcudaをインストールにtoolkitを利用するが、CUDA Toolkitでインストール時(apt-get -y install cuda)に依存としてNVIDIAドライバがDLされる。(コマンド的には
apt-get install cuda-drivers
か?)- -yオプションを外せば、何がインストールされるかを表示後、install継続の確認がなされる。
- CUDA Toolkitの指定nvidia driverがインストールされ、しばしば①のインストールしたものより、ダウングレードに
- 再度、
apt-get install nvidia-XXX
をしてあげるが、dockerで実際にコンテナを作り、動かすとError
root@PCXXX:/home/XXX# docker run --runtime=nvidia --rm nvidia/cuda:9.0-base nvidia-smi docker: Error response from daemon: OCI runtime create failed: container_linux.go:370: starting container process caused: process_linux.go:459: container init caused: Running hook #1:: error running hook: exit status 1, stdout: , stderr: nvidia-container-cli: requirement error: unsatisfied condition: cuda>=9.0, please update your driver to a newer version, or use an earlier cuda container: unknown.
- 原因?:CUDA toolkitのapt-get install cudaで依存で入る(しばしばバージョンの低い)nvidia driverと、その後再インストール(apt-get install nvidia--XXX)するnvidia driverとの相性が悪い?
方法C: CUDA Toolkitのcuda-driversの利用 ($ apt-get install cuda-drivers
)
指定nvidia driver & 指定cudaを入れる方法案
- 未検証
- a,b + CUDA Toolkitの合わせ技
- aやbの指定のnvidia-driverを使いつつ、cudaを入れられる?
記事[Nvidia Driver and CUDA Installation Sequence !]で、Cuda Toolkitのinstall時に以下のコマンドを実行 Alternatively, if you are going to install using the deb installer (which is what was installing 387 driver etc.) then you could just do: $ sudo apt-get install cuda-toolkit # これでCUDA入る? instead of $ sudo apt-get install cuda # こちらは使わずに and that should skip the driver install as well.
CUDA Toolkitで指定verのCUDAを入れる方法 ref
$ sudo apu-get install cuda-10-0 #これで指定のCUDA入る?
方法C: CUDA Toolkitを利用した堅実な方法・手順
- 流れ
$ apt-get --purge remove nvidia-* # 注:nvidia-dockerもなくなる $ apt-get --purge remove cuda-*
CUDA Toolkitを利用したnvidia driver & cuda (10.1 update2)のインストール
Architecture確認
$ arch
- OS -> Architecture -> Distribution -> Version -> Install Type: deb(local)で表示されるコマンドを入力
// Ex. 10.1 update2 $ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-ubuntu1604.pin $ sudo mv cuda-ubuntu1604.pin /etc/apt/preferences.d/cuda-repository-pin-600 $ wget https://developer.download.nvidia.com/compute/cuda/10.1/Prod/local_installers/cuda-repo-ubuntu1604-10-1-local-10.1.243-418.87.00_1.0-1_amd64.deb $ sudo dpkg -i cuda-repo-ubuntu1604-10-1-local-10.1.243-418.87.00_1.0-1_amd64.deb $ sudo apt-key add /var/cuda-repo-10-1-local-10.1.243-418.87.00/7fa2af80.pub $ sudo apt-get update $ sudo apt-get -y install cuda # cuda-driversで nvidia driverもinstallされる(Down-gradeが起きるか注意 -yオプションをなしにして、何がinstallされるか確認した方が良い) $ reboot
# NVIDIA-SMI 418.87.00 $ cat /usr/local/cuda/version.txt # CUDA Version 10.1.243
cuDNN
- dockerを使う上で、hostにcuDNNは必要なのかよくわかっていない。
- サイトからcuDNNのパッケージをダウンロード(アクセスするにはメンバー登録が必要)
具体的には以下の3個のdebパッケージをダウンロード
ダウンロードしたフォルダで以下のコマンドを実行して、cuDNNをインストール
(「~~」はファイル名にあるcudnnとcudaのバージョンが入る) $ dpkg -i libcudnn~~*+cuda~~_amd64.deb $ dpkg -i libcudnn~~-dev_~~*+cuda~~_amd64.deb $ dpkg -i libcudnn~~-doc_~~*+cuda~~_amd64.deb
- PATHの設定
- 用途: nvccコマンド?(よくわかっていない)
- ~/.bashrcなどに
(「~~」はcudaのバージョンが入る) export PATH=/usr/local/cuda-~~/bin:$PATH export LD_LIBRARY_PATH=/usr/local/cuda-~~/lib64:$LD_LIBRARY_PATH
- 全ユーザに適応されるところにpathを追記する必要がありそう
(dockerk更新)
nvidia-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 $ apt-get update $ apt-get install -y nvidia-docker2 $ systemctl restart docker $ reboot
確認
// dockerコンテナを利用した検証 // オプション $ docker run --rm --runtime=nvidia nvidia/cuda:10.1-base nvidia-smi $ docker run --rm --gpus all nvidia/cuda:10.1-base nvidia-smi // hostのcuda versionより上のコンテナは動かなかった。