モチベーション
これまで、GPUを搭載したリモートのワークステーションでJupyterLabコンテナを起動し、手元のMacBook Airからブラウザで接続して、pythonコードを開発して来た。例えばこの記事。 最近はVSCodeを良く使っているので、VSCodeから同じようにGPU搭載のリモートワークステーション上のpython開発環境に接続するようにしてみた。
情報源
いつもは、ネットの情報を参考に試しているが、今回はClaudeに聞きなが構築した。 そうは言ってもCUDAバージョンとtorchインストールとの整合性確認のため、PyTorchのページは参考にした。
最初は、次のようなプロンプトから始めた。
GPU搭載(NVIDIA driver version:580.95.05)のubuntuサーバで、dockerコンテナにuvでpython環境を構築したい。フレームワークはpytorchとして、docker コンテナを作成するDockerfileを提示してください。
pythonのパッケージ管理ツールとしてuvを使っている。
構築
サーバ側
Dockerfile
Claudeの回答を参考に以下のDockerfileを作成した。
# NVIDIA CUDAベースイメージを使用
FROM nvidia/cuda:12.4.0-runtime-ubuntu22.04
# 環境変数の設定
ENV DEBIAN_FRONTEND=noninteractive \
PYTHONUNBUFFERED=1 \
HOME=/root
# 作業ディレクトリの設定
WORKDIR /workspace
# 必要なパッケージのインストール
RUN apt-get update && apt-get install -y \
curl \
git \
build-essential \
ca-certificates \
wget \
&& rm -rf /var/lib/apt/lists/*
# uvのインストール
RUN curl -LsSf https://astral.sh/uv/install.sh | sh
# Pythonのインストール(フルパス指定で確実に)
RUN /root/.local/bin/uv python install 3.11
# 仮想環境の作成
RUN /root/.local/bin/uv venv /opt/venv --python 3.11
# PATHを一度にまとめて設定(これが重要)
ENV PATH="/opt/venv/bin:/root/.local/bin:/usr/local/nvidia/bin:/usr/local/cuda/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" \
VIRTUAL_ENV="/opt/venv"
# インストール確認
RUN uv --version && python --version
# PyTorchとその依存関係をインストール
RUN uv pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124
# よく使うライブラリもインストール
RUN uv pip install \
numpy \
pandas \
matplotlib \
jupyter \
ipython \
tqdm \
scikit-learn \
scipy \
seaborn \
plotly
# Jupyter Notebookのポートを公開
EXPOSE 8888
# .bashrcに仮想環境のアクティベートを追加
RUN echo 'source /opt/venv/bin/activate' >> /root/.bashrc
CMD ["/bin/bash"]
コンテナをビルド
Dockerfileのあるディレクトリで次を実行して、dockerコンテナを作成。
sudo docker build -t pytorch-uv ./
コンテナを起動
次のコマンで、ビルドしたコンテナを起動。以下はシェルプロにしている。NB_DIRは各々の環境に応じて変更して欲しい。
export NB_DIR=/mnt/nfs2
export CUDA_VISIBLE_DEVICES=0
sudo docker run --gpus all -it --rm -v ${NB_DIR}:/workspace -p 8888:8888 pytorch-uv:latest
クライアント側
クライアント側での作業の前提として、VS Codeは既にインストール済みであり、サーバ側とはsshで接続できる状態であること。
VS Code拡張機能をインストール
VSCodeに次の拡張機能をインストールする。
- Remote-SSH
- Docker
- Dev Containers
SSH接続の設定
VS Codeを起動し、次の手順でSSH接続の設定(~/.ssh/configに)する。
- コマンドパレットを開く(Cmd+Shift+p)
- Remote-SSH: Connect to Host…(Remote-SSH: ホストに接続する)を選ぶ
- Configure SSH Hosts…(SSHホストを構成する)を選択して、~/.ssh/configを編集する
Host host-name
HostName IP-address
User user-name
IdentityFile ~/.ssh/id_rsa
Port 22
ForwardAgent yes
host-name、IP-addressとuser-nameの部分は、各自の環境に合わせて欲しい。
ホストに接続
VS Code上で、次の手順でホストに接続する。
- コマンドパレットで、Remote-SSH: Connect to Host…(Remote-SSH: ホストに接続する)を選ぶ
- 上記で設定したhost-nameを選択
- sshでホストに接続しようとして、パスワードを求められるので、パスワードを入力
- 新しいVS Codeウィンドウが開く
コンテナに接続
- コマンドパレットで、Dev Containers: Attach Running Container…(実行中のコンテナにアタッチ)を選ぶ
- 起動中の目的のコンテナを選択
- 新しいVS Codeウィンドウが開き、コンテナ内部に接続される
pythonバージョンの確認・変更
Dockerfileで構築したpythonが使われていない場合(自分は、ここでハマった)は、次の手順で、コンテナのpythonを使うようにする。
- VS Code右下のpythonバージョン表示をクリック
- /opt/venv/bin/pythonを選択
まとめ
Claudeをお供にpython開発環境を構築した。ネットを調べる代わりに、エラーが出たらその状況を正確にClaudeに伝えると、解決策が提示されるので、比較的簡単に環境構築が出来た。
次に、この開発環境を使って、昨年の今頃取り組んでいたPINNを実行してみる。