雑誌に書かれたコードを写経したら"TypeError: CLIPTextModel.init() got an unexpected keyword argument 'offload_state_dict'"となったけど、試行錯誤の末、解決できたという話。
日経ソフトウェア
このところ日経ソフトウェアは生成AIとかLLMの話題が喧しい。興味を持った記事をハンズオンで動かそうとしても、GPUを載せたPCでないと非常に時間がかかったりそもそも動かせないものがあったりして、ちょっとした小金を払って定期購読して、せっかく興味を持った記事があるのに試せない状況で悔しい思いをしてました。そんな折、2025年7月号の特集は「ローカル生成AI入門」。当然のようにGPUを載せたPCで動かすようなプログラムが書かれています。
ゲーミングPC
最近、とある転機があり、それをきっかけに自作PCを作ろうと思い立ちました。主要なパーツはこんな感じ。
| 種類 | メーカー・型番など |
|---|---|
| CPU | AMD Ryzen 7 9700X |
| マザーボード | ASUS TUF GAMING B650EM-PLUS WIFI |
| グラフィックボード | 玄人志向 GG-RTX5060Ti-E16GB/OC/DF |
| メモリ | DDR5-6400 32GB×2枚(64GB) |
これでローカルLLMの環境が用意できました。
試行錯誤
と思って、誌面に記載されているコードを打ち込んでみたところ、冒頭のエラーに見舞われたというわけなのですよ。
生成AI環境を試そうとして、別の生成AIに頼るのはどうなんだ?と思いながら、ChatGPTと格闘したり、ネット上の先人たちの助言を見たりして、PyTorchのバージョンを変えながらGPUドライバを入れ替えてみたり、CUDAバージョンを上げたり下げたり、ホスト側のOSもUbuntuからWindowsに変えたり、色々と試行錯誤しました。
先人たちもおそらく同じような試行錯誤をしたと思いますが、色々な記事を探していた中で目からうろこだったのはこちらの記事。
コンテナ側にCUDAを入れればホスト側にはCUDA不要と教えられ、なるほど~となりました。
解決策
今回はOSを入れ替える試行錯誤をしたりして、Windows 11 はほぼ初期状態だったので、そこからの簡単な構築も添えておきます。
- Windows 11 Home (25H2)をクリーンインストール
- マザボ関連でASUSが推奨してくるドライバをインストール
- NVIDIA公式のNVIDIA Studioドライバーをインストール
- コマンドプロンプトで
wsl --install
→ちなみに、25H2ではデフォルトのディストリビューション(Ubuntu)は勝手にインストールされない - Microsoft StoreでDocker DesktopとVSCodeをインストール
- VcXsrvをインストールして起動
- Dockerfileからコンテナをビルド
docker build -t pytorch-diffusers:0.35.1 . - コンテナを起動
docker run -it --rm --gpus all -v ${PWD}:/workspace -e DISPLAY=host.docker.internal:0 pytorch-diffusers:0.35.1 bash
# ベースイメージ:PyTorch公式CUDAランタイム
FROM pytorch/pytorch:2.8.0-cuda12.9-cudnn9-runtime
# 非対話モード&タイムゾーン指定
ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=Asia/Tokyo
# 必要なLinuxパッケージをインストール
RUN apt-get update && \
apt-get install -y --no-install-recommends \
git \
wget \
curl \
unzip \
&& rm -rf /var/lib/apt/lists/*
RUN apt-get update && apt-get install -y \
libx11-6 \
libxext6 \
libxrender1 \
libxrandr2 \
libxtst6 \
libxi6 \
tk \
&& rm -rf /var/lib/apt/lists/*
# pipを最新化
RUN python -m pip install --upgrade pip
# diffusers環境をバージョン固定でインストール
RUN pip install "diffusers[torch]==0.35.1" \
transformers==4.56.2 \
accelerate==1.10.1 \
scipy==1.16.2 \
huggingface_hub --upgrade
# 作業ディレクトリ
WORKDIR /workspace
# デフォルトのシェルをbashに設定
CMD ["/bin/bash"]
# Usage:
# docker build -t pytorch-diffusers:0.35.1 .
#
# GUI Mode 起動:
# docker run -it --rm --gpus all -v ${PWD}:/workspace -e DISPLAY=host.docker.internal:0 pytorch-diffusers:0.35.1 bash
# Windows側でVcXsrvが必要
お試し開発環境なのでコンテナ起動のとき --rm を指定してます。当たり前ですがbashをexitしたらコンテナが終了するので、起動したターミナルを残したままVSCodeを起動してコンテナに入って作業します。Dockerfileがあるディレクトリがコンテナの/workspaceにマウントされるので、コンテナ内で書き換えたコードは残ります。
参考資料