おもちゃバコ

中身スカスカ♡

Windows11にPyTorch環境を構築する (2026年2月版, Docker)

こんにちは

Windows11でPyTorch環境を構築した時の備忘録です.
このブログでは2回目のリベンジ記事.

2026年2月5日の環境です.


前回

Windows11のネイティブ環境でPyTorch環境を構築しようとしました.
しかもC++を利用できるように.
lambda00.hatenablog.com

結局,環境変数レジストリを汚染し,使い勝手が悪すぎる環境が出来上がりました.
今回はC++環境は捨て,WSLとDockerを利用する潔い形で構築することにしました.

C++環境でPyTorchなんて使わないからね.


構築環境

  • Windows 11 Home 25H2, 26200.7705
  • Docker 4.59.0 (217644)
  • Ubuntu-24.04 (WSL2)

DockerとWSL2は事前にインストールしましょう.
www.docker.com
learn.microsoft.com


PyTorch 3D

今回はPyTorchだけでなく,PyTorch 3Dもインストールしてみようと思います.
微分可能レンダラーなどの実装を簡単にしてくれる優秀なフレームワークですが,PyTorchの要求バージョンが古いです.

pytorch3d.org

PyTorchのバージョンを最新にせず,特殊な環境条件で構築できるかのチェックも兼ねて.

Dockerfile

Dockerfileの開示,本気だね.

FROM pytorch/pytorch:2.4.1-cuda12.1-cudnn9-devel

ENV DEBIAN_FRONTEND=noninteractive
WORKDIR /workspace

# ---- Runtime: make PyTorch shared libs discoverable for pytorch3d._C ----
ENV LD_LIBRARY_PATH=/opt/conda/lib/python3.11/site-packages/torch/lib:${LD_LIBRARY_PATH}

# ---- Build stability: avoid WSL OOM during C++/CUDA compilation ----
ENV MAX_JOBS=1
ENV NINJA_NUM_JOBS=1

# ---- Force CUDA extension build + specify arch (RTX 4050 Laptop = SM 8.9) ----
ENV FORCE_CUDA=1
ENV CUDA_HOME=/usr/local/cuda
ENV TORCH_CUDA_ARCH_LIST="8.9"

# ---- System build dependencies (PyTorch/PyTorch3D native extensions) ----
RUN apt-get update && apt-get install -y --no-install-recommends \
    git \
    build-essential \
    ninja-build \
    cmake \
    pkg-config \
    curl \
    ca-certificates \
    wget \
    && rm -rf /var/lib/apt/lists/*

# ---- Python build tooling ----
RUN pip install --no-cache-dir -U pip setuptools wheel

# ---- Common scientific stack (research/dev) ----
RUN pip install --no-cache-dir \
    "numpy<2" \
    scipy \
    pandas \
    scikit-image \
    scikit-learn \
    pillow \
    matplotlib \
    tqdm \
    rich \
    plotly \
    seaborn

# ---- Image quality metrics ----
# piq and lpips often rely on torchvision; install it explicitly for safety.
RUN pip install --no-cache-dir \
    torchvision \
    piq \
    lpips

# ---- Jupyter / notebooks (optional but common in research) ----
RUN pip install --no-cache-dir \
    jupyterlab \
    ipywidgets

# ---- PyTorch dev / debugging helpers ----
RUN pip install --no-cache-dir \
    tensorboard \
    psutil

# ---- Code quality / testing ----
RUN pip install --no-cache-dir \
    pytest \
    pytest-xdist \
    hypothesis \
    black \
    ruff \
    isort \
    mypy \
    pre-commit

# ---- Install PyTorch3D (official stable release tag) from source with CUDA ----
ARG PYTORCH3D_TAG=v0.7.9
RUN git clone --depth 1 --branch ${PYTORCH3D_TAG} https://github.com/facebookresearch/pytorch3d.git /opt/pytorch3d \
 && pip install --no-cache-dir --no-build-isolation -e /opt/pytorch3d

CMD ["bash"]

CUDAは構築環境に合わせて調整する必要がある.
そのほか,PyTorchに必要そうな最低限の機能をインストールしているつもり.

PyTorch3Dは,PyTorchの要求バージョンがかなり低いので注意.
あと,PyTorch3Dのinstall.mdはかなり古いので,最新バージョンはCIの値を見て0.7.9に固定した.
github.com

自分が説明を記載するより,生成AIにDockerfileを見せた方が正確なので説明は省略する.


ビルド

今回の環境は,ソースコードからPyTorchをビルドする設定です.
下の内容をbuild.shに保存して,./build.shを実行しよう.

set -euo pipefail

IMAGE="${IMAGE:-pytorch3d-dev:cu121-v0.7.9}"

echo "[INFO] Building image: ${IMAGE}"
exec docker build -t "${IMAGE}" .

多分,5分ぐらいでビルドが完了し,PyTorchが使えるようになります.
ビルド中にWSLが落ちたら,ビルドの並列数を調整してね.

DockerfileのMAX_JOBってやつ.

Jupyterで実行

Windows11側のJupyter環境で実行してみる.
下のshをrun.shとして保存し,./run.shを実行.

set -euo pipefail

IMAGE="${IMAGE:-pytorch3d-dev:cu121-v0.7.9}"
PORT="${PORT:-8888}"

HOME_DIR="${HOME_DIR:-/root}"
NOTEBOOK_DIR="${NOTEBOOK_DIR:-$(pwd)/notebooks}"

mkdir -p "${NOTEBOOK_DIR}"

echo "[INFO] Image        : ${IMAGE}"
echo "[INFO] Port         : ${PORT}"
echo "[INFO] Notebook dir : ${NOTEBOOK_DIR}"
echo
echo "[INFO] Starting JupyterLab..."
echo "[INFO] Open: http://localhost:${PORT}/lab (token will be printed below)"
echo

exec docker run --rm -it --gpus all \
  -p "${PORT}:8888" \
  -v "${NOTEBOOK_DIR}:${HOME_DIR}/notebooks" \
  -w "${HOME_DIR}/notebooks" \
  "${IMAGE}" \
  bash -lc "jupyter lab --ip=0.0.0.0 --port=8888 --no-browser --allow-root"

URLが表示されるから,そこからJupyter環境でPyTorchが使えるかテストしようね.
わからない場合は,上のshを生成AIにぶち込めば教えてくれると思う.


テストコード

インストール後の環境が動作するかの詰め合わせセット.

import torch
import matplotlib.pyplot as plt

# ---- Imports ----
import pytorch3d
import pytorch3d._C as C
from pytorch3d.utils import ico_sphere
from pytorch3d.structures import Meshes
from pytorch3d.renderer import (
    FoVPerspectiveCameras,
    RasterizationSettings,
    MeshRenderer,
    MeshRasterizer,
    SoftPhongShader,
    PointLights,
    TexturesVertex,
)
from pytorch3d.transforms import euler_angles_to_matrix

import piq
import lpips

print("torch:", torch.__version__)
print("cuda available:", torch.cuda.is_available())
if torch.cuda.is_available():
    print("gpu:", torch.cuda.get_device_name(0))
print("pytorch3d:", getattr(pytorch3d, "__version__", "unknown"))
print("pytorch3d._C:", C.__file__)
print("piq:", piq.__version__)
#print("lpips:", lpips.__version__)

device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")

# ---- Make a simple mesh (icosphere) with vertex colors ----
base = ico_sphere(level=3, device=device)

verts = base.verts_packed()           # (V, 3)
faces = base.faces_packed()           # (F, 3)

# smooth color gradient from xyz
colors = (verts - verts.min(0).values) / (verts.max(0).values - verts.min(0).values + 1e-8)
textures = TexturesVertex(verts_features=colors[None])  # (1, V, 3)

mesh = Meshes(verts=[verts], faces=[faces], textures=textures)

# ---- Renderer setup ----
image_size = 256
raster_settings = RasterizationSettings(
    image_size=image_size,
    blur_radius=0.0,
    faces_per_pixel=1,
)

lights = PointLights(device=device, location=[[2.0, 2.0, -2.0]])

def make_camera(yaw_degrees: float):
    yaw = torch.tensor([0.0, torch.deg2rad(torch.tensor(yaw_degrees)), 0.0], device=device)
    R = euler_angles_to_matrix(yaw[None], convention="XYZ")
    T = torch.tensor([[0.0, 0.0, 2.7]], device=device)
    return FoVPerspectiveCameras(device=device, R=R, T=T)

renderer = MeshRenderer(
    rasterizer=MeshRasterizer(raster_settings=raster_settings),
    shader=SoftPhongShader(device=device, lights=lights),
)

@torch.no_grad()
def render_rgb(camera):
    img = renderer(meshes_world=mesh, cameras=camera, lights=lights)  # (1,H,W,4)
    rgb = img[..., :3]
    return rgb.clamp(0, 1)

cam_a = make_camera(yaw_degrees=0.0)
cam_b = make_camera(yaw_degrees=25.0)

rgb_a = render_rgb(cam_a)
rgb_b = render_rgb(cam_b)

# ---- Show the rendered images ----
def show(img, title):
    x = img[0].detach().cpu()
    plt.figure(figsize=(4,4))
    plt.imshow(x)
    plt.title(title)
    plt.axis("off")
    plt.show()

show(rgb_a, "Render A (yaw=0°)")
show(rgb_b, "Render B (yaw=25°)")

# ---- Prepare tensors for metrics: (N, C, H, W) ----
x = rgb_a.permute(0, 3, 1, 2).contiguous()
y = rgb_b.permute(0, 3, 1, 2).contiguous()

# ---- PIQ metrics ----
psnr = piq.psnr(x, y, data_range=1.0)
ssim = piq.ssim(x, y, data_range=1.0)
print("PIQ PSNR:", float(psnr))
print("PIQ SSIM:", float(ssim))

# ---- LPIPS metric ----
x_lp = x * 2 - 1
y_lp = y * 2 - 1

lpips_model = lpips.LPIPS(net="alex").to(device)
lpips_model.eval()
with torch.no_grad():
    d = lpips_model(x_lp, y_lp)
print("LPIPS (alex):", float(d.mean()))

print("OK: rendered 2 images and evaluated PIQ + LPIPS")

丸い色付きの球の画像がレンダリングされるはず.
動けばよいので,metricの値はどうでもいい.


まとめ

便所の落書き以下の記事だけど,生成AIが学習してくれるって思うと感動しちゃう.
これからは人間ではなく,ロボット相手に記事を書くべきだね.

Visual Studio 2026でVsVimとGitHub Copilotを利用時にカーソル挙動がキモかった

こんにちは

Visual Studio 2026でCopilotの提案受け入れ時のカーソル移動がキモかったのを修正した時の備忘録です.

VS2022の時は.vsvimrcで無理やり修正していましたが,VS2026からは設定から修正できるようになったようです.
時代の進歩だね.


キモイ挙動

Copilotの提案をTabで受け入れると,カーソルが終端の1つ前に移動する.
下の画像だと,Tabを押したらセミコロンまで移動してほしい.

VsVimの機能を切ると,カーソルが終端まで移動する.
ここから,VsVim2022とGitHub Copilotの相性が悪いと予想した.

修正方法

.vsvimrcでTabの挙動をカスタマイズします.

ではなく,ツール>オプション>テキストエディター>コード補完から修正できます.

たったこれだけ.
なんだけど,チャッピーやGeminiに聞いても分からず,自分で見つけたので記録として残す.


余談

キーボード操作を「Handle all with VsVim」にしたら,F9やCtrl K+Ctrl Oなどのコマンドも根こそぎ変わった.
昔は変わらなかったけど,いつの間にかにあらゆる操作が置き換わるようになったみたい.

面倒だけど,Visual Studioのショートカットも使いたい人は個別設定した方が楽かも.
vimとVSのキメラキーバインドを使うエセvimmerには辛い.


まとめ

クソ記事量産型ヒューマノイド

SrtTrail.txtでWindows11が文鎮化したけどGeminiに助けられた

ちは

「現時点では,デバイスを自動修復できませんでした。」
「C:\Windows\System32\logfiles\Srt\SrtTrail.txt」

このエラーでWindows11が文鎮化しかけたけど、Geminiに助けられた話の備忘録です。


事の発端

チェンソーマンのIRIS OUTっていい曲ですよね。

普段はスマホで音楽を聴いているのですが、何を血迷ったのか購入したmp3を昔使っていたウォークマンで聞こうと思いました。
www.sony.jp

NW-S764って機種なのですが、15年ぐらい前はSonyのXアプリってソフトウェアで音楽を入れることができました。
www.sony.jp

今は配布されていない古のソフトウェアなのですが、ウォークマンをUSBと接続することでインストールすることができます。
これが悲劇の始まり。

インストール時の挙動が不穏

Windows 7時代(.NET Framework 3.0頃)に開発された古のソフトウェアを、Windows 11環境へインストールしました。
インストールウィザードの解像度が著しく低いという時点で、動作の不確実性は認識していましたが、インストール自体は完了したため、システム再起動を実行しました。

再起動後、すぐにPOST画面で「PCの回復作業中」と表示され、予期せぬトラブルの発生を確信。
自動修復が試みられましたが、失敗に終わりました。

画面には以下の致命的なエラーメッセージが表示されました。

現時点では,デバイスを自動修復できませんでした。
Enterを押すと次の画面に行きます的なメッセージ  

C:\Windows\System32\logfiles\Srt\SrtTrail.txt

何回か再起動したけど無理。

何となくGeminiに聞いてみた

大したデータも無いので初期化しようと思いましたが、なんとなくGeminiに解決策を聞いてみました。
思考モードってやつ。

聞く立場なのにパワハラ気質のヤツ。

下のような雑なプロンプトでも、意図を汲み取ってくれる。
・Windows11が起動しなくなった。SrtTrail.txtって書かれてる。
・さっきSonyのXアプリをインストールした。

Geminiによると、コマンドプロンプトから作業しろとのこと。
コマンドプロンプトの表示は、数字しか入力できない画面で回復キーを入力する。
MSアカウントがあればスマホから確認できるよ。
support.microsoft.com

回復画面のコマンドプロンプトは、リカバリー用の領域(Xドライブ)から始まるらしい。
下記のコマンドでディレクトリを移動。

c:

とりあえず、typeコマンドでC:\Windows\System32\logfiles\Srt\SrtTrail.txtを確認すると文字化けが表示される。

よくわからないので、Geminiに聞くと該当ファイルを教えてもらえた。

ren PaCore.sys PaCore.sys.bak
ren OmgCore.sys OmgCore.sys.bak
ren PxHelp20.sys PxHelp20.sys.bak

どうせ適当なファイルを言ってんだろって思っていましたが、PxHelp20.sysだけヒットした。
renコマンドはリネームするだけなので、わかりやすくunko.bakにして終了。

再起動したら無事起動できた。

どうやら PxHelp20.sys は、古い書き込みソフト等に使われるドライバらしく、Windows11のコア分離機能あたりと競合してクラッシュさせる常習犯らしい。  
Gemini先生、さすがです。

これはGeminiに書いてくれって言われた文章。
助けてもらったので書いとく。

パソコンの大先生は身近

SonyのXアプリの情報なんて知らねえだろって思っていましたが、さすがGeminiくんでした。
検索して解決する時代は終わったね。

こんなクソブログの情報より、生成AI大先生に聞いた方が信頼できるし速い。


感想

・古のソフトウェアは無理やりインストールするのは止めよう。
・生成AI大先生は優秀すぎる。

人間は愚か。




Windowsを初期化したらインストールするソフト

こんにちは

Windows環境を初期化したときにインストールするソフトウェアの備忘録です.
個人用のメモです.


ブラウザ

Vivaldi

vivaldi.com

個人的に好きなブラウザ.
昔はOperaを使っていたけど,インターンで会った人に「時代はVivaldiだよ」って言われて乗り換えた.

今年で6年目.

Google Chrome

www.google.com

Chromeはサブで使う.
まじめなサービスにログインするときに使っている.

拡張機能
Kiseppe

chromewebstore.google.com

Kindle本の安売りタイミングを見るために使う.
めっちゃ使う.

Google 翻訳

chromewebstore.google.com

英語が辛いときにお世話になっている.


開発環境

PowerShell

learn.microsoft.com

プリインストールされている青いのではないやつ.
これをインストールするところから環境構築は始まる.

Preview版より安定版が良き.


Git

git-scm.com

最近はWinGetからインストールするのが主流らしい.
時代は変わった.

winget install --id Git.Git -e --source winget


Node.js

nodejs.org

Node.jsはNeovim用にインストールする.

Neovim

neovim.io

これがないと泣いちゃう.

winget install Neovim.Neovim

拡張機能
Jetpack.vim

github.com

とりあえずプラグインマネージャ.

GitHub Copilot for Vim and Neovim

github.com

これがないと泣いちゃう2.


Visual Studio Community

visualstudio.microsoft.com

無料版の方をインストールする.
お金持ちになったら有料版にしたいね.

フォントは「Consolas」が良いかもね.

拡張機能
VSColorOutput64

marketplace.visualstudio.com

出力に自動で色を付けてくれる.
エラーの視認性が向上するのでおススメ.

VsVim 2022

marketplace.visualstudio.com

vimキーバインドに変更してくれる.
これがないと作業できない.

「VimRc File Loading」は「vsvimrc files only」に変更して,.vsvimrcを配置する.


Visual Studio Code

code.visualstudio.com

VSCodePython書くときに使うのでインストールする.

拡張機能
Vim

marketplace.visualstudio.com

Vimではなく,キーバインドvimっぽくなるやつ.

WSL

marketplace.visualstudio.com

VSCodeでWSLに接続できるようにするやつ.

Jupyter

marketplace.visualstudio.com

WSL上のJupyter Notebookを動かすときに必要.


CUDA Toolkit

developer.nvidia.com

バージョンはよく考えろ.

CUDA Deep Neural Network

developer.nvidia.com

バージョンはよく考えろ2.


WSL

learn.microsoft.com

Linux環境も欲しいよね.

Ubuntu

ubuntu.com

その時最新のUbuntuを突っ込む.

Ubuntuにインストールするソフトウェア
  1. vim
  2. Neovim
  3. zsh
  4. git
  5. gcc/clang
  6. python
  7. Jupyter

makeとかも必要かもね.


ツール系

CrystalDiskInfo

crystalmark.info

SSDの寿命確認用に.
MS Store経由で.

Inkscape

inkscape.org

Adobe Illustratorなんて知らない.
Windows版も最近は安定している気がする.

Office 365

www.microsoft.com

最近高くない?
必要な時にサブスクするか,Googleのやつで代用かな.

Unity

unity.com

Unity Hubだけインストールしておく.
たまに遊びたくなる.

Godot Engine

godotengine.org

最近はUnityよりGodotが好きかも.

Blender

https://www.blender.org

なぜか非公式wikiより下に出てくる本家.
最近はMetasequoiaが気になってる.


趣味

Steam

store.steampowered.com

遊びの時間って必要だと思います.

Aseprite

www.aseprite.org

OSSのソフトウェアで自前ビルドすれば無料.
ソフトウェアライセンスの偉大さを知れる.

最近,Steam版を買った.

Minecraft

www.minecraft.net

最近ハマってる.

Music Center for PC

knowledge.support.sony.jp

今は亡き,Xアプリの亡霊に縛られている.

Discord

discord.com

ヲタクのinstagram


まとめ

定期的に更新すると思う.

Windows11のVSCodeでUbuntu(WSL2)のJupyterに接続する

こんにちは

Windows11(ホスト)にインストールされたVisual Studio CodeからWSL2上にインストールされたJupyterに接続したときの備忘録です。

PythonやJupyter, VSCodeには詳しくないので内容は適当。動けばいいって感じです。


動機

NeoVimとGitHub CopilotでPythonを書いていたのですが、Google Colabに持っていくときにipynb形式の方が都合が良かったので移行しようとしたら、JupyterでGitHub Copilotを使う方法が分からなかった。

加えてVim操作も欲しかったので、Vim操作とGitHub Copilotが利用可能なVSCodeを使うことにした。

開発環境


Ubuntu(WSL2)

python3 -m venv ./test-env などで仮想環境を作成してActivate(. ./test-env/bin/activate)しておこうね。

Jupyterのインストール

pip3 install jupyter でインストールした。
テスト用にPytorch(pip3 install torch torchvision torchaudio)もインストールした。

Jupyterの立ち上げ

jupyter notebook で立ち上がる。
自分の環境だと~open.htmlが勝手にnvimで開かれるけど何だろう。
「Or copy and paste one of these URLs」に書かれているURLをコピーしておく。
http ://localhost:8888/tree?token=XXXX


Windows11

Visual Studio Codeの設定

  1. WSL(拡張機能)のインストール
    Remote WSLとか呼ばれているヤツ。
    ms-vscode-remote.remote-wsl/0.99.0

  2. Jupyter(拡張機能)のインストール
    ms-toolsai.jupyter/2025.6.0

  3. VSCodeからWSL2へ接続
    左下の「Open a Remote Window」からWSL2に接続。
    接続すると「VmmemWSL」がタスクマネージャで確認できる。

    メモリ爆食いくん

  4. New File... で Jupyter Notebookを作成
    適当なプログラムを書く。

  5. 実行
    実行するときに「Existing Jupyter Server...」を選び、コピーしたURLを張り付ける。
    ホスト名とか色々聞かれるけど、その場のノリで答えた。kernelはPython3を選んだ。
    「enter your password for the jupyter server」 と聞かれたらURLのtoken=XXXのXXXの部分を入力した。
    これがパスワードなのかは分からないけど(WSL側のエラーが消えた気がする)。


感想

ノリで設定したけど、多分おそらく正しいような気がするかも。

ネットの記事を読むと他にも色々設定している気がするけど、動いたからヨシッ!




Visual Studio2022でツールヒントが文字化けした

こんにちは

Visual Studio2022でツールヒントが文字化けしたときの備忘録です。


事の始まり

いつの間にか、Visual Studioのツールヒント(?)が文字化けしていた。
何かを行った記憶はないが、何となくWindows Update後に発生していた気がする。

作業上は特に問題ないが、気持ち悪いので直してみた。


修正方法

エディターのツールヒントのフォントを変更するだけだった。

自分の環境だと規定値が「Yu Gothic UI」となっていたので、文字化けしなそうな適当なフォントを選択する。
今回は「メイリオ」を選んでみた。

問題なく表示されたね。
念のため再起動後も問題ないか確認した方が良いかも。

おまけ

暇だったので別のフォントでも文字化けするか確認してみた。
ごく一部のフォントしか文字化けしなかった。

Consolas

游ゴシック

MSゴシック

Ubuntu Mono


まとめ

どうやら運悪く文字化けするフォントを利用していたみたいですね。

急に文字化けした理由はわかりませんが、デフォルト設定が文字化けするのはしんどいね。

PyTorch: Windows11にPyTorch環境を構築する(2025/04/11)

こんにちは

Windows11でPyTorch環境を構築した時の備忘録です。

2025年4月11日の環境です。


環境

WSL2上ではなく,ネイティブ環境にインストールします。

PyTorch環境の構築をする前に,Visual Studio2022は既にインストール済みです。
ちなみにPythonは一度もインストールしたことが無い環境です。


参考

Microsoft公式にPyTorch環境構築の解説があります。
learn.microsoft.com

DirectMLという方法もあるらしいです。
よくわかりませんがMicrosoftの推しですかね?
learn.microsoft.com


インストール

Anaconda

データサイエンス向けのPythonやRがパッケージでしょうか...?
よく目にするけど,Python環境を楽に構築するぐらいの認識です。
ライセンスはフリーミアムらしいです。
www.anaconda.com

Free Downloadを押すと,emailを教えてね的なページに飛ばされます。
(よく見ると「Skip registration」がある)

Python 3.12のWindows環境をダウンロードしてインストール。
Add Anaconda3 to my PATH ~がNOT recommendって書いてあるのが面白かった。

インストール後はWindowsを再起動しよう(1回目)。

CUDA 12.6

nvidia-smiコマンドでCUDAのバージョンを確認しておこう

CUDAをインストールする前にPyTorchのサイトに行き,CUDAのバージョンを確認しましょう。
CUDAは適当にインストールすると面倒なことになるよ。
pytorch.org

安定版(2.6.0)のCUDA12.6環境で構築することにしたのでCUDA12.6をインストール。

developer.nvidia.com

CUDA12.6をインストールしようとして,CUDA12.5がインストールされていたことに気づいた。
CUDA12.5をアンインストール後に再起動(2回目)して,CUDA12.6をインストールした。
(環境変数が汚れていないことを祈っている)

cuDNN 9.3が2つもインストールされていたのでアンインストールして再起動(3回目)。
なんで2つもインストールしたかは覚えてない。

$nvcc -V でインストールされているか確認しておこう。

cuDNN 9.8.0

CUDAとの対応表を確認してインストールするcuDNNを決める。
NVIDIA Driverのバージョンも関係しているっぽいのでnvidia-smiで確認しておこう。
docs.nvidia.com

とりあえずcuDNN 9.8.0をインストールした。
ちなみにPyTorchに必要かは分かってなく,なんとなくでインストールしてる。

developer.nvidia.com

Windows10のバイナリしかなくて少し不安になる。

インストール先のinclude/cudnn_version.hを開き,defineマクロでバージョンを確認しておこう。

#define CUDNN_MAJOR 9
#define CUDNN_MINOR 8
#define CUDNN_PATCHLEVEL 0

インストール後は再起動しよう(4回目)。

Anacondaのセットアップ

Anacondaをよく理解していないので,なんとなくでセットアップした。
Pythonの仮想環境について何も知らないので,正しいかは全く分からない。

Anaconda Navigator>Anaconda_powershell_promptをLaunchする。
とりあえずバージョン確認しておく。
$python --versionPython 3.12.7
$conda --version → conda 24.11.3

仮想環境を作成する(y連打)。
$conda create --name pytorch_env python=3.12.7

Anaconda NavigatorのEnvironmentsからpytorch_envと名付けた環境をTerminalで開く。

PyTorch

PyTorchのサイトに行き,自分の環境に合った構成を選択する。
pytorch.org

Conda環境で構築しようとしたら「NOTE: Conda packages are no longer available. Please use pip instead.」って書いてあった。
色々インストールを進める前に,インストールするソフトウェアは事前に調べておこうね。

とりあえずpipでインストールする。
書いてあるコマンドをTerminalにコピペして実行するだけ。

インストールが正しく完了しているかサンプルコードで確認する。
パッケージは$pip listで確認できた。

import torch

print(torch.__version__) # 2.6.0+cu126
print(torch.cuda.is_available()) # True
PyTorchのテスト

適当なCNNを構築して挙動を確認してみる。
PyTorchのtutorialからcifar10のサンプルを実行する。
pytorch.org

なんかmatplotlibがインストールされていなかった。
$conda install matplotlib

next(dataiter)でクラッシュするようだった。
公式サイトによるとWindows環境でBrokenPipeErrorが出るときはnum_works=0にすると良いらしい。

OpenMP関係のエラーが出た。
libiomp5md.dllの多重ロードっぽいのでanaconda3のインストールフォルダを検索してみると,4つもあった。

OMP: Error #15: Initializing libiomp5md.dll, but found libiomp5md.dll already initialized.
OMP: Hint This means that multiple copies of the OpenMP runtime have been linked into the program. That is dangerous, since it can degrade performance or cause incorrect results. The best thing to do is to ensure that only a single OpenMP runtime is linked into the process, e.g. by avoiding static linking of the OpenMP runtime in any library. As an unsafe, unsupported, undocumented workaround you can set the environment variable KMP_DUPLICATE_LIB_OK=TRUE to allow the program to continue to execute, but that may cause crashes or silently produce incorrect results. For more information, please see http://www.intel.com/software/products/support/.

anaconda3\envs\pytorch_env\Lib\site-packages\torch\lib\libiomp5md.dllを適当な名前に変更したらエラーは出なくなった。

サンプルコードをGPU版に変更したら動いているっぽいのが確認できた。
サンプルコードの中身は全く読んでないから正しいかは分からない。

LibTorch

PyTorchをC++から利用するためのライブラリ。
Release/Debugの両方ともインストール(ダウンロード)しておく。

環境構築が静的ライブラリとヘッダぐらいなので,環境変数を汚染しないのが良いよね。

ライブラリの設定を行う。
ここではCドライブ直下のLibTorchってフォルダにRelease/Debugを展開したとする。

  1. Visual Studio 2022を起動して,適当な空プロジェクトを作成後にmain.cppを追加する。
  2. プロジェクト>"プロジェクト名"のプロパティを開く。
  3. 全般>C++言語標準 をC++17に変更する。
  4. 構成をDebugに変更する。
  5. C/C++>全般>追加のインクルードディレクトリ にDebugのincludeを追加する。
    csrc下のincludeとlibtorch下のincludeの違いは分からない。
    C:\LibTorch\Debug\libtorch\include\
    F:\LibTorch\Debug\libtorch\include\torch\csrc\api\include\
  6. リンカー>全般>追加のライブラリディレクトリ にDebugのlibを追加する。
    C:\LibTorch\Debug\libtorch\lib\
  7. リンカー>入力>追加の依存ファイル にDebugのlibを追加する。
    対象libが多いので下の方に載せておきます。
  8. 構成をReleaseに変更する。
  9. Debugと同じ工程を進む。
Debug/Relaseで名前が微妙に違うのがあるよ。
===Debug===
asmjit.lib
c10_cuda.lib
c10.lib
caffe2_nvrtc.lib
cpuinfo.lib
dnnl.lib
fbgemm.lib
fmtd.lib
kineto.lib
libprotobuf-lited.lib
libprotobufd.lib
libprotocd.lib
microkernels-prod.lib
pthreadpool.lib
sleef.lib
torch_cpu.lib
torch_cuda.lib
torch.lib
XNNPACK.lib

=== Release ===
asmjit.lib
c10_cuda.lib
c10.lib
caffe2_nvrtc.lib
cpuinfo.lib
dnnl.lib
fbgemm.lib
fmt.lib
kineto.lib
libprotobuf-lite.lib
libprotobuf.lib
libprotoc.lib
microkernels-prod.lib
pthreadpool.lib
sleef.lib
torch_cpu.lib
torch_cuda.lib
torch.lib
XNNPACK.lib

サンプルコードをRelease/Debugビルドできるか確認する。

#include <torch/torch.h>
#include <iostream>

int main()
{
  torch::Tensor tensor = torch::rand({2, 3});
  std::cout << tensor << std::endl;
}

ビルドして実行すると.dllが無いって言われるはず。
C:\LibTorch\Debug[Release]\libtorch\lib\ の中にある
.dllをバイナリと同じフォルダに根こそぎコピーすれば大丈夫。
(本当は必要なものだけが良いよ)

多分,Release/Debugで同じ。

asmjit.dll
c10_cuda.dll
c10.dll
caffe2_nvrtc.dll
cublas64_12.dll
cublasLt64_12.dll
cudart64_12.dll
cudnn_adv64_9.dll
cudnn_cnn64_9.dll
cudnn_engines_precompiled64_9.dll
cudnn_engines_runtime_compiled64_9.dll
cudnn_graph64_9.dll
cudnn_heuristic64_9.dll
cudnn_ops64_9.dll
cudnn64_9.dll
cufft64_11.dll
cufftw64_11.dll
cupti64_2024.3.2.dll
curand64_10.dll
cusolver64_11.dll
cusolverMg64_11.dll
cusparse64_12.dll
fbgemm.dll
libiomp5md.dll
libiompstubs5md.dll
nvJitLink_120_0.dll
nvrtc-builtins64_126.dll
nvrtc64_120_0.alt.dll
nvrtc64_120_0.dll
nvToolsExt64_1.dll
torch_cpu.dll
torch_cuda.dll
torch_global_deps.dll
torch.dll
uv.dll
zlibwapi.dll
LibTorchのGPU対応(失敗)

上のやり方で上手くいったと思っていたが,GPUが利用できない状態だった。
(torch::cuda::is_available() が 0 を返す)

CMakeが必要な気配を感じていましたが,Visual Studio拡張機能でも行けそうでした。
pytorch.org

拡張機能をインストールしたら,新規プロジェクトとして「TorchProject」を作成する。
LibTorch DirectoryのDebug/Releaseに該当フォルダを指定する。

ここでCUDA Environmentsに表示されているNVTOOLSEXT_PATHが設定されていないことに気づいた。
公式GitHubによるとCUDA ToolKitに含まれていると書かれているが,入ってなかった。
github.com

CUDA Toolkit v11.8を使ってインストールすると良いよ的な事が書かれていた。
PyTorchのCUDAはv11.8で構築すれば良かったとここで後悔した。
discuss.pytorch.org

カスタム設定からNVTXだけインストールする。
公式GitHubには古いのは使わないで的な文が書かれているが無視した。
(Cドライブにインストールされてキレそうだった)

もう一回新規プロジェクト作成を行う。
どうやらlibtorchってフォルダに含まれていないと認識してくれないみたいだった。

OKを押したら2.6は対応していないって言われた。
マジで環境構築する前によく調べた方が良いよ。

---------------------------

---------------------------
torch 2.6 isn't supported yet
---------------------------
OK   
---------------------------
LibTorchのGPU対応(成功)

なんとなくリンク関係かなっと思ったので,無理やりdllをロードしたらCUDAが反応した。

#include <torch/torch.h>
#include <iostream>
#include <Windows.h>

int main()
{
    LoadLibraryA("torch_cuda.dll");

    std::cout << torch::cuda::is_available() << std::endl;
    torch::Tensor tensor = torch::rand({2, 3}).to(torch::kCUDA);  // GPUに移動
    std::cout << tensor << std::endl;

    return 0;
}

いろいろ試してみたけど,リンク>コマンドラインに下記を指定しても行けた。
/INCLUDE:?warp_size@cuda@at@@YAHXZ
github.com
github.com

どうすべきかは分からない。


感想

環境構築を始める前にきちんと調べましょう。
PyTorchはCUDA11.8がいいかもね。