Open1
技術tips 環境系
Windows 10 homeでUbuntu+docker+GPU+VScode
普段はWindowsのゲーミングPCで別SSDを使ってLinuxブート + Macで開発してましたが、windowsで完結すると色々楽だなと感じてきたのと(特にファン制御やCPUGPU電圧下げるなどして静かに動作)、WSL2&GPU&Dockerが普通にできるようになったらしいので試します。
WSL導入 & GPU向けの環境構築は以下参照
※Windows on Dockerは動作するが、デフォルトでwindowsシャットダウン時にエラーダイアログが多発するので、wls2内のDockerを使います
# コンテナ作成
docker image build --network host -t python/tensorflow ./.devcontainer/
# gpu有効で
docker run -v $PWD:/home/workspace --network host --shm-size=1g --ulimit memlock=-1 --ulimit stack=67108864 --gpus all --rm -it python/tensorflow
Dockerfile
FROM nvcr.io/nvidia/tensorflow:20.12-tf2-py3
WORKDIR /home/workspace
# install python
#RUN apt-get update
COPY requirements.txt ${PWD}
#RUN pip install --upgrade pip
RUN pip install -r requirements.txt
# ユーザーを作成
ARG DOCKER_UID=1000
ARG DOCKER_USER=xxxx
ARG DOCKER_PASSWORD=xxxx
RUN useradd -m --uid ${DOCKER_UID} --groups sudo ${DOCKER_USER} \
&& echo ${DOCKER_USER}:${DOCKER_PASSWORD} | chpasswd
# 作成したユーザーに切り替える
USER ${DOCKER_USER}
遭遇したエラー
- docker volumeによるパーミッションの問題 (dockerにwsl2のユーザー追加)
- wsl2の通信失敗 https://github.com/microsoft/WSL/issues/4285#issuecomment-522201021
resolv.confが期待どおりに機能し始めた後の私のワンライナー:(WSL2のシャットダウン後も)
sudo rm /etc/resolv.conf && sudo bash -c 'echo "nameserver 8.8.8.8" > /etc/resolv.conf' && sudo chattr +i /etc/resolv.conf
- vscodeからのdevcontainer.json+dockerでgpuが有効にできなかったので、wsl上でdocker runすることに
- 全体的にパフォーマンスはネイティブubuntuの方が良い。別ドライブのbootに戻すか・・? windowsだとCPU・ネットワーク速度・GPUメモリ2GB使用される、メモリの処理が変など問題は多い
- Docker利用なので再現は簡単なのが良いところか