recursivejの技術メモ

情報処理技術メモ・備忘録

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版

  • nvidia-dockerを使ったGPUマシンのnvidia driver, cuda更新するにあたっての作業メモ
  • 環境

GPUの最新のドライバは配布されているのか?確認とインストール方法

方法A: NVIDAIドライバダウンロードサイト

方法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.

方法C: CUDA Toolkitを利用した堅実な方法・手順

  • 流れ
    • 古いnvidia driver, cudaを削除
    • CUDA Toolkitを使用して、nvidia driver, cudaをインストール
    • (docker更新)
    • nvidia-dockerのインストール

      古いものを削除

$ apt-get --purge remove nvidia-*    # 注:nvidia-dockerもなくなる
$ apt-get --purge remove cuda-*

CUDA Toolkitを利用したnvidia driver & cuda (10.1 update2)のインストール

$ 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 v~.* Runtime Library for Ubuntu~ (Deb)
    • cuDNN v~.* Developer Library for Ubuntu~ (Deb)
    • cuDNN v~.* Code Samples and User Guide for Ubuntu~ (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

(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より上のコンテナは動かなかった。

その他参考