
3行で説明
- RTX5070Ti+UbuntuでFramePackが動作しなかったので対応策を探った
- PyTorchの最新版はRTX 5070Tiに対応しきれておらず不具合が発生する
- CUDAとPyTorchのバージョンをsm_120対応ビルド(cu128/nightly)へ切り替えることで安定動作を得られた
発端
2025年11月ごろから、いわゆるDRAMパニックが始まった。これにより、主に高価格帯のパーツの駆け込み需要が集中して、DDR5を中心としたメモリパーツが枯渇して、次にDDR5を含むBTOパソコンが枯渇して、さらにはグラボも枯渇して、価格高騰と納期の遅延が出てしまい、パソコン市場は大変なことになっている。
かくいう私も、ゲーミング+生成AI用のマシンが欲しいと思いながらもグズグズしていたが、この機を逃すとまずいと思い、某ショップのBTOパソコンを注文した次第。決済完了から1週間後に商品ページを覗いてみたら、サイレントで7万円値上げされており、逃げ切りに成功したものの鬼畜かよと思った次第。
マシン構成
今回組んだマシン構成は以下の通り。
- CPU:Core Ultra 7 265K
- RAM:32GB
- GPU:GeForce RTX 5070 Ti 16GB
- ストレージ:1TB SSD×2、8TB HDD×1(データ保存用)
- OS:Windows 11 と Ubuntu Desktop 24.04.3 LTS のデュアル(別ストレージ)
GPUは、VRAMが16GB載っているRTX 5070 Tiを選択した。Windows 11ではSteamなどを動作させゲーミング環境を、Ubuntu Desktopでは生成AI環境を構築したいと考え、SSDを2枚用意してそれぞれインストールすることでデュアル構成にした(SSD1枚でデュアルブートすることもでできなくはないが、アップデートの際に事故る)。
生成AI系のアプリはWindows版も用意されているが、Linux版と比較するとパフォーマンスが10~20%落ちてしまうこととカスタム性を考慮して、今回はUbuntu Desktop上で動作させることにした。
いろいろとインストールしてみたが…
ChatGPT PlusとSuperGrokの助けを得ながら、生成AI系のアプリをいろいろとインストールしてみた。i2vであればWan2.2が素晴らしい。それを踏まえて、FramePackもインストールしてみようと思ったがうまく実行できず、以下のエラーメッセージに遭遇した。
torch.OutOfMemoryError: CUDA out of memory. Tried to allocate 14.34 GiB. GPU 0 has a total capacity of 15.46 GiB of which 3.06 GiB is free. Including non-PyTorch memory, this process has 12.15 GiB memory in use. Of the allocated memory 9.70 GiB is allocated by PyTorch, and 2.11 GiB is reserved by PyTorch but unallocated. If reserved but unallocated memory is large try setting PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True to avoid fragmentation. See documentation for Memory Management (https://pytorch.org/docs/stable/notes/cuda.html#environment-variables)
これはVRAMの断片化が原因である。FramePackは一時的にピーク使用量が跳ね上がることがあり、16GBでもメモリ確保に失敗してエラーが出ることはある。
いろいろ設定を変えてみたら、以下のエラーに変わった。
Loaded CLIPTextModel to cuda:0 as complete. Traceback (most recent call last): File "/home/eagle0wl/Applications/FramePack/demo_gradio.py", line 126, in worker llama_vec, clip_l_pooler = encode_prompt_conds(prompt, text_encoder, text_encoder_2, tokenizer, tokenizer_2) File "/home/eagle0wl/Applications/FramePack/.venv/lib/python3.10/site-packages/torch/utils/_contextlib.py", line 120, in decorate_context return func(*args, **kwargs) File "/home/eagle0wl/Applications/FramePack/diffusers_helper/hunyuan.py", line 31, in encode_prompt_conds llama_attention_length = int(llama_attention_mask.sum()) torch.AcceleratorError: CUDA error: no kernel image is available for execution on the device Search for cudaErrorNoKernelImageForDevice' in https://docs.nvidia.com/cuda/cuda-runtime-api/group__CUDART__TYPES.html for more information. CUDA kernel errors might be asynchronously reported at some other API call, so the stacktrace below might be incorrect. For debugging consider passing CUDA_LAUNCH_BLOCKING=1 Compile with TORCH_USE_CUDA_DSA to enable device-side assertions.
PyTorchが「CUDA error: no kernel image is…」を吐いているが、これは GeForce RTX 50** 系の問題で、RTX 5070 Ti(sm_120)向けにビルドされたカーネルが無かったこと、PyTorch本体がsm_120に対応していても、CUDA拡張(xFormers / Flash-Attention)が未対応だと no kernel image になることが原因の模様。ここでは、高速化をあきらめて安定動作を図ることにした。
いろいろと試したところ、以下の変更でFramePackが安定動作した。
- Pythonのバージョンを3.10.xにする
- 必要パッケージをインストールし直す
- PyTorchのバージョンはcu128(CUDA12.8向けビルド)にする
- メモリ断片化を抑制する(例:export PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True)
- Flash Attentionをオフにする(例:export XFORMERS_DISABLE_FLASH_ATTN=1)
$ cd ~/Applications
$ git clone https://github.com/lllyasviel/FramePack.git
$ cd FramePack
$ uv python install 3.10
$ uv python pin 3.10
$ uv venv -p 3.10 .venv
$ uv pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu128
$ uv pip install -r requirements.txt
以下のコマンドで現状のバージョンを確認できる。
$ uv run python - << 'PY'
import torch
print("torch:", torch.__version__, "cuda:", torch.version.cuda)
print("gpu:", torch.cuda.get_device_name(0))
print("capability:", torch.cuda.get_device_capability(0))
PY
torch: 2.11.0.dev20260110+cu128 cuda: 12.8 ← PyTorchのバージョンはcu128(CUDA12.8向けビルド)
gpu: NVIDIA GeForce RTX 5070 Ti
capability: (12, 0) ←NVIDIAのCapabilityのバージョンは12.0(sm_120)
あとは、以下の起動用シェルスクリプトを配置すればよい。
#!/bin/bash
export PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True
export XFORMERS_DISABLE_FLASH_ATTN=1
export CUDA_LAUNCH_BLOCKING=1
uv run demo_gradio.py
CUDA_LAUNCH_BLOCKING=1は、GPUエラーは非同期で出ることが多く、スタックトレースがズレて「別の行で落ちたように見える」ので、それを同期化して分かりやすくする目的で入れている。
まとめ
しかし…よく考えてみると、RTX 5070 Tiを使っている以上、PyTorchを使うアプリすべて(ComfyUIなど)が同じ問題を抱えているわけだから、すべてのアプリにおいて上記の設定を入れないと安定動作が得られないことになる。
ということで、全てのアプリにおいて設定変更を実施した。私はPythonのパッケージ管理と仮想環境の実現のために uv を使用しているが、快適かつ安全に変更することができた。
現行のComfyUIはPython3.13か3.12の使用を推奨しているが、3.10でも今のところは問題なく動作している。
この状況でできることは、安定したsm_120対応xFormersが出るまで待つしかない。
今回マシンを組む際に購入した周辺機器
この
ヒートシンクを使っている。問題なし。
1つのキーボードやマウスを4つまでのPCで切り替えて使うことができる。しょぼいやつだと、切り替え後の認識に時間がかかったり、時折キーボードとマウスを認識しなくなることもあり、その時はマウスを新たに繋いで再起動するしか無かったのだが、これは問題なかった。あと、有線リモコンのボタンのクリック感が良い。
複数のマシンの音声出力を1つのスピーカーでまとめてしまいたいときに使える。私はアリエクで買ったが、電源アダプタはついていなかった。
このケーブルを
電源ケーブルとして使えば良い。5Vで動くのでUSBアダプタと組み合わせてどうぞ。
こちらは1つの音声出力を2個所にスイッチできるアダプタ。しっかりしたスピーカーと
ダイソーの300円スピーカーを切り替えるのに使っている。
ChipTuneだと
ダイソーの300円スピーカー(現在は
ディスコン)のほうが味が出るんですよ。