DeepSeek Janus-Pro完全ガイド
- Janus-Proとは?2025年1月の衝撃的デビュー
- 利用可能なモデルラインナップ
- 2025年版:主要画像生成AIとの性能比較
- クイックスタートガイド
- よくある問題と解決策
- 必要な環境要件
- Janus-Proの実用的な活用シナリオ
- パフォーマンス最適化のテクニック
- まとめと今後の展望
- (参考)旧記事:進化の過程として
- はじめに
- 1. 公式インストール手順
- 2. 実際のインストール手順(プラットフォーム別)
- 3. インストール手順(失敗から学ぶ)
- PyTorch環境の再構築 – CUDA 12.4対応の手順
- PyTorch環境での依存関係の解決とトラブルシューティング
- 依存関係の問題に遭遇した際の解決プロセス
- GPUメモリ不足の問題と解決方法
- GPUメモリ使用量の最適化:画像生成数の調整
- より効率的なJanusの活用方法:上級者向けの最適化テクニック
Janus-Proとは?2025年1月の衝撃的デビュー
2025年1月27日、DeepSeekが発表したJanus-Pro-7Bが、AI画像生成の世界に革命をもたらしました。GenEvalベンチマークで80.0%、DPG-Benchで84.2%という驚異的なスコアを記録し、OpenAIのDALL-E 3(67%/74%)やStable Diffusion 3 Medium(74%/74%)を大幅に上回ったのです。
前半は概要を、後半は実際に行った記録です。
統合型マルチモーダルAIという新概念
Janus-Proの革新性は「統合型マルチモーダル理解と生成」にあります。従来の画像生成AIが「テキスト→画像」の一方向だったのに対し、Janus-Proは:
双方向の処理が可能
- テキストから画像を生成(text-to-image)
- 画像の内容を理解して説明文を生成(image-to-text)
- 画像に関する質問に答える(visual Q&A)
- 画像を見ながら対話的に修正指示を出せる
技術的な革新:デカップリング・アーキテクチャ
Janus-Proの中核となる技術は、視覚エンコーディングの分離(デカップリング)です:
- 理解用エンコーダー:SigLIP-Lを使用し、画像の意味的特徴を抽出
- 生成用エンコーダー:LlamaGenベースで、画像生成に特化
- 統一Transformerバックボーン:両方の処理を1つのアーキテクチャで実現
この設計により、従来のマルチモーダルモデルが抱えていた「理解と生成の役割衝突」を解決し、両方のタスクで高い性能を実現しています。
利用可能なモデルラインナップ
Janus-Pro-7B(フラッグシップモデル)
- パラメータ数:70億
- 必要VRAM:約14GB以上
- 特徴:最高品質の画像生成、商用利用に最適
- ベンチマーク性能:業界トップクラス
Janus-Pro-1B(軽量版)
- パラメータ数:10億
- 必要VRAM:約4GB
- 特徴:個人PCでも動作可能、WebGPU対応でブラウザ実行も可能
- 用途:開発・テスト、リソース制限環境
JanusFlow-1.3B(Rectified Flow版)
- パラメータ数:13億
- 特徴:Rectified Flowによる安定した生成
- 用途:より予測可能な出力が必要な場合
2025年版:主要画像生成AIとの性能比較
ベンチマーク結果(2025年1月時点)
| モデル | GenEval | DPG-Bench | MMBench | 価格 |
|---|---|---|---|---|
| Janus-Pro-7B | 80.0% | 84.2% | 79.2 | 無料(オープンソース) |
| DALL-E 3 | 67.0% | 74.0% | – | $20/月(ChatGPT Plus) |
| Midjourney v7 | – | – | – | $10〜/月 |
| Stable Diffusion SDXL | 74.0% | 74.0% | – | 無料(オープンソース) |
各AIの特徴と使い分け
Janus-Proが優れている点
- 画像理解と生成の両方が可能(唯一の統合型)
- 完全オープンソース(MITライセンス)
- ローカル実行可能(プライバシー保護)
- 商用利用が完全無料
DALL-E 3(ChatGPT)の強み
- 最も使いやすい対話型インターフェース
- GPUなしで利用可能(クラウドベース)
- GPT-4oとの深い統合
- 法的保護(著作権侵害への補償付き)
Midjourney v7の強み
- 芸術的品質では最高峰
- 活発なコミュニティサポート
- スタイル参照機能
- Discord/Web両対応
Stable Diffusion SDXLの強み
- 最も軽量で高速
- 豊富なコミュニティモデル
- 完全なカスタマイズ性
- LoRAなどの拡張技術
クイックスタートガイド
方法1:オンラインデモ(最も簡単)
ブラウザで今すぐ試せます:
- Janus-Pro-7B: https://huggingface.co/spaces/deepseek-ai/Janus-Pro-7B
- Janus-Pro-1B: ブラウザ内実行も可能(WebGPU対応)
方法2:ローカルインストール(完全版)
# 1. プロジェクトをクローン
git clone https://github.com/deepseek-ai/Janus.git
cd Janus
# 2. Python環境をセットアップ(Python 3.8以上必須)
python -m venv venv
# Windows:
venv\Scripts\activate
# Mac/Linux:
source venv/bin/activate
# 3. 依存関係をインストール
pip install --upgrade pip
pip install -e .[gradio]
# 4. デモを起動
python demo/app_januspro.py
方法3:Pythonコードで使用
import torch
from transformers import AutoModelForCausalLM
from janus.models import MultiModalityCausalLM, VLChatProcessor
from janus.utils.io import load_pil_images
# モデルをロード(1Bの軽量版を使用)
model_path = "deepseek-ai/Janus-Pro-1B"
vl_chat_processor = VLChatProcessor.from_pretrained(model_path)
tokenizer = vl_chat_processor.tokenizer
vl_gpt = AutoModelForCausalLM.from_pretrained(
model_path,
trust_remote_code=True
)
vl_gpt = vl_gpt.to(torch.bfloat16).cuda().eval()
# 画像理解の例
conversation = [
{
"role": "<|User|>",
"content": f"<image_placeholder>\nこの画像を説明してください",
"images": [image_path],
},
{"role": "<|Assistant|>", "content": ""},
]
# 画像生成の例
prompt = "富士山の夕焼けを描いた美しい水彩画"
# 生成コードは公式サンプルを参照
よくある問題と解決策
GPUメモリ不足エラー
RuntimeError: CUDA error: out of memory
解決策1:モデルサイズを変更
# demo/app_januspro.py を編集
# 変更前
model_path = "deepseek-ai/Janus-Pro-7B"
# 変更後
model_path = "deepseek-ai/Janus-Pro-1B"
解決策2:生成枚数を減らす
# demo/app_januspro.py 内で2箇所変更
parallel_size: int = 1, # 5から1に
parallel_size = 1 # 5から1に
解決策3:精度を下げる
# FP16を使用してメモリ使用量を半減
vl_gpt = vl_gpt.to(torch.float16).cuda().eval()
Windows特有のビルドエラー
ERROR: Failed building wheel for sentencepiece
解決方法:
- Visual Studio Build Tools 2022をインストール
- 必要なコンポーネントを選択:
- MSVC v143 – VS 2022 C++ x64/x86 ビルドツール
- Windows 11 SDK
- Windows用 C++ CMake tools
CUDA/PyTorchバージョンの不一致
# CUDAバージョンを確認
nvcc -V
# 適切なPyTorchをインストール
# CUDA 11.8の場合
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
# CUDA 12.1以上の場合
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
必要な環境要件
最小要件(1Bモデル)
- GPU:4GB VRAM(GTX 1650以上)
- RAM:8GB
- ストレージ:10GB
- Python:3.8以上
推奨要件(7Bモデル)
- GPU:16GB VRAM(RTX 4080以上)
- RAM:16GB
- ストレージ:20GB
- CUDA:11.8以上
CPUのみでの実行
GPUがない場合でも動作は可能ですが、生成速度が大幅に低下します(数分〜数十分/枚)。
Janus-Proの実用的な活用シナリオ
ビジネス活用例
- ECサイトの商品画像生成と説明文作成
- 商品説明から画像を自動生成
- 既存画像から詳細な説明文を生成
- マーケティング素材の制作
- ブランドガイドラインに沿った画像生成
- 複数バリエーションの同時作成
- 教育コンテンツ制作
- 図解や説明画像の自動生成
- 画像に基づく解説文の作成
研究・開発での活用
- マルチモーダルAIの研究
- 完全オープンソースで自由に改変可能
- 学術論文での使用が可能
- 新しいアーキテクチャの実験
- カスタムアプリケーション開発
- REST APIとしてサービス化
- エッジデバイスへのデプロイ
- 既存システムとの統合
パフォーマンス最適化のテクニック
バッチ処理の最適化
def get_optimal_batch_size(vram_gb):
"""VRAMサイズに基づく最適バッチサイズの決定"""
if vram_gb >= 24:
return 8
elif vram_gb >= 16:
return 4
elif vram_gb >= 8:
return 2
else:
return 1
推論の高速化
# キャッシュを有効化して推論速度向上
outputs = vl_gpt.generate(
inputs_embeds=inputs_embeds,
use_cache=True,
max_new_tokens=512
)
# 複数GPUでの並列処理
model = torch.nn.DataParallel(model)
まとめと今後の展望
Janus-Proは、2025年の画像生成AI分野において画期的な選択肢です。
主な特徴
- 業界トップクラスの性能(ベンチマークで実証済み)
- 統合型マルチモーダル処理という独自性
- 完全オープンソース(MITライセンス)
- 商用利用が完全無料
今後の展開
- より大規模なモデル(30B、70Bクラス)の登場
- 動画生成への拡張
- リアルタイム処理の実現
- モバイルデバイスでの実行最適化
DeepSeekの急速な技術革新により、AI画像生成の民主化がさらに進むことが期待されます。
最新情報はDeepSeek公式GitHubでご確認ください。
この記事は2025年9月時点の情報に基づいています。
(参考)旧記事:進化の過程として
以下は、Janus-Proリリース後の試行錯誤実践記録です。技術的な進化を理解する上で参考になるため、残しておきます。
deepseek-ai/Janus:画像生成の新しい地平線
はじめに
画像生成AIの世界で、新たな可能性を切り開く存在として「deepseek-ai/Janus」が登場しました。DALL·EやStable Diffusionなど、既存の画像生成AIをご存知の方も多いと思いますが、Janusはそれらとは一線を画す特徴を持っています。
Janusの特筆すべき点は、単なる画像生成にとどまらない「統合的なマルチモーダル理解と生成」能力です。つまり:
- 画像の理解と生成を1つのモデルで実現
- テキストから画像を生成するだけでなく、画像の内容を理解して回答
- より自然な対話形式での画像生成が可能
最新版の「Janus-Pro」では、さらに以下の進化を遂げています:
- 最適化された学習戦略
- 拡張されたトレーニングデータ
- より大規模なモデルサイズ(7Bパラメータ)
私自身、このモデルを見たとき「え?こんなことができる画像生成があるの?」と驚きました。DALL·EやStable Diffusionと比較してみたくなりますよね。
ただし、この高度な機能を使いこなすには、適切な環境設定が必要です。以下では、実際にJanusを動作させるための具体的な手順を説明していきます。
1. 公式インストール手順
deepseek-ai/Janusの公式ドキュメントでは、以下のようなシンプルなインストール手順が記載されています:
Requirements:
- Python >= 3.8
Installation:
pip install -e .
For Gradio Demo:
pip install -e .[gradio]2. 実際のインストール手順(プラットフォーム別)
Windows環境での注意点
Windowsで開発する場合、以下の追加コンポーネントが必要です:
- Visual Studio Build Tools
- MSVC v143 – VS 2022 C++ x64/x86 ビルドツール
- Windows 11 SDK (10.0.xxxxx.x)
- Windows用 C++ CMake tools
これらは、Visual Studio Installerからインストールできます。
Linux環境(Ubuntu/WSL)での注意点
Linuxベースの環境(Ubuntu や WSL)では、上記のVisual Studio関連のコンポーネントは不要です。必要なのは:pip
Python 3.8以上
3. インストール手順(失敗から学ぶ)
実際に試してみた手順と発生した問題です:
1. 環境構築の手順
1-1. プロジェクトのクローン
まず、Janusのソースコードを取得する必要があります:
# GitHubからプロジェクトをクローン
git clone https://github.com/deepseek-ai/Janus.git
# クローンしたディレクトリに移動
cd Janus1-2. Python仮想環境の作成と有効化
# 仮想環境の作成
python -m venv venv
# 仮想環境の有効化
# Windows の場合:
venv\Scripts\activate
# Unix/MacOS の場合:
source venv/bin/activate1-3. 必要なパッケージのインストール
公式ドキュメントでは以下のように記載されています:
pip install -e .ただし、Gradioデモを実行する場合は以下のコマンドを使用します:
pip install -e .[gradio]この違いは重要で:
pip install -e .– 基本的な機能のみをインストールpip install -e .[gradio]– Gradioデモに必要な追加パッケージも含めてインストール
今回は画像生成のデモを行いたいので、後者のpip install -e .[gradio]を使用します。
このように、GitHubからのクローンを最初のステップとして追加することで、より完全な手順となりました。
発生したエラー
Stored in directory: C:\Users\minok\AppData\Local\Temp\pip-ephem-wheel-cache-cc4swq0u\wheels\2c\4b\45\67d28393c36daaef8e17794819f595f9a361a464d36ab025ae
Building wheel for sentencepiece (pyproject.toml) ... error
error: subprocess-exited-with-error
× Building wheel for sentencepiece (pyproject.toml) did not run successfully.
│ exit code: 1
╰─> [32 lines of output]
C:\Users\minok\AppData\Local\Temp\pip-build-env-0841uj5l\overlay\Lib\site-packages\setuptools\_distutils\dist.py:270: UserWarning: Unknown distribution option: 'test_suite'
warnings.warn(msg)
C:\Users\minok\AppData\Local\Temp\pip-build-env-0841uj5l\overlay\Lib\site-packages\setuptools\dist.py:493: SetuptoolsDeprecationWarning: Invalid dash-separated options
!!
********************************************************************************
Usage of dash-separated 'description-file' will not be supported in future
versions. Please use the underscore name 'description_file' instead.
By 2025-Mar-03, you need to update your project and remove deprecated calls
or your builds will no longer be supported.
See https://setuptools.pypa.io/en/latest/userguide/declarative_config.html for details.
********************************************************************************
!!
opt = self.warn_dash_deprecation(opt, section)
running bdist_wheel
running build
running build_py
creating build\lib.win-amd64-cpython-312\sentencepiece
copying src\sentencepiece/__init__.py -> build\lib.win-amd64-cpython-312\sentencepiece
copying src\sentencepiece/sentencepiece_model_pb2.py -> build\lib.win-amd64-cpython-312\sentencepiece
copying src\sentencepiece/sentencepiece_pb2.py -> build\lib.win-amd64-cpython-312\sentencepiece
running build_ext
building 'sentencepiece._sentencepiece' extension
creating build\temp.win-amd64-cpython-312\Release\src\sentencepiece
"C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Tools\MSVC\14.41.34120\bin\HostX86\x64\cl.exe" /c /nologo /O2 /W3 /GL /DNDEBUG /MD -IC:\youtube\Janus\venv\include -IC:\Users\minok\.pyenv\pyenv-win\versions\3.12.0\include -IC:\Users\minok\.pyenv\pyenv-win\versions\3.12.0\Include "-IC:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Tools\MSVC\14.41.34120\include" "-IC:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Auxiliary\VS\include" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\10\\include\10.0.22621.0\\um" "-IC:\Program Files (x86)\Windows Kits\10\\include\10.0.22621.0\\shared" "-IC:\Program Files (x86)\Windows Kits\10\\include\10.0.22621.0\\winrt" "-IC:\Program Files (x86)\Windows Kits\10\\include\10.0.22621.0\\cppwinrt" /EHsc /Tpsrc/sentencepiece/sentencepiece_wrap.cxx /Fobuild\temp.win-amd64-cpython-312\Release\src\sentencepiece\sentencepiece_wrap.obj /MT /I..\build\root\include
cl : コマンド ライン warning D9025 : '/MD' より '/MT' が優先されます。
sentencepiece_wrap.cxx
src/sentencepiece/sentencepiece_wrap.cxx(2809): fatal error C1083: include ファイルを開けません。'sentencepiece_processor.h':No such file or directory
error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio\\2022\\BuildTools\\VC\\Tools\\MSVC\\14.41.34120\\bin\\HostX86\\x64\\cl.exe' failed with exit code 2
[end of output]
note: This error originates from a subprocess, and is likely not a problem with pip.
ERROR: Failed building wheel for sentencepiece
Successfully built janus
Failed to build sentencepiece
ERROR: Failed to build installable wheels for some pyproject.toml based projects (sentencepiece)
エラーの原因を探るためにCUDA環境を確認したところ、以下のことがわかりました:
nvcc -Vの結果:
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2024 NVIDIA Corporation
Built on Thu_Mar_28_02:30:10_Pacific_Daylight_Time_2024
Cuda compilation tools, release 12.4, V12.4.131
Build cuda_12.4.r12.4/compiler.34097967_0これは重要な発見です。CUDA 12.4がインストールされていますが、PyTorch 2.0.1は通常CUDA 11.8以下でビルドされています。このバージョンの不一致が、先のインストールエラーの原因の一つと考えられます。
解決のためには以下の2つの選択肢があります:
- PyTorch 2.0.1に合わせてCUDA 11.8をインストールする
# PyTorch 2.0.1 + CUDA 11.8向けのインストールコマンド
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118- より新しいPyTorchバージョンを使用する
# 最新のPyTorch + CUDA 12.4向けのインストールコマンド
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124この事例から学べる重要なポイント:
- 深層学習フレームワークのインストール前には必ずCUDAバージョンを確認する
- PyTorchの公式サイト(https://pytorch.org/)でバージョンの組み合わせを確認する
- 特定バージョンが指定されているプロジェクトでは、それに合わせたCUDA環境の準備が必要
PyTorch環境の再構築 – CUDA 12.4対応の手順
1. 既存の仮想環境のクリーンアップ
まず、既存の環境をクリーンに保つため、以下の手順で環境をリセットします。
# 現在の仮想環境が有効な場合は、抜けます
deactivate次に、既存の仮想環境フォルダを削除します。Windows環境では:
# venvフォルダの削除
rd /s /q venv # Windowsコマンド
# または
rm -rf venv # PowerShellの場合2. 新しい仮想環境の作成
クリーンな状態から、新しい仮想環境を作成します:
# 新しい仮想環境を作成
python -m venv venv
# 仮想環境を有効化(Windows環境)
venv\Scripts\activate有効化が成功すると、プロンプトの先頭に (venv) が表示されます:
(venv) PS C:\your\project\path>3. CUDA 12.4対応のPyTorchインストール
最新のCUDA 12.4に対応したPyTorchをインストールします:
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124このコマンドは以下の処理を行います:
- CUDA 12.4向けにビルドされた最新バージョンのPyTorchをインストール
- CUDA 12.4対応のtorchvisionとtorchaudioもインストール
- NVIDIAの公式ホストされているビルド済みのwheelファイルを使用
インストールが完了したら、以下のコマンドでPyTorchがGPUを認識しているか確認できます:
python -c "import torch; print(torch.cuda.is_available())"これで、CUDA 12.4に対応したPyTorch環境の基礎が整いました。
1. pip install -e . の意味
- 目的:
現在のディレクトリにある Python パッケージを「editable(編集可能)」モードでインストールします。 - 詳しい説明:
- Editable モードとは、パッケージのソースコードとシンボリックリンクを使って環境にインストールする方法です。
これにより、インストール後もパッケージのソースコードを直接編集でき、変更内容が即座に反映されるため、開発中のパッケージに対して便利です。 - このコマンドを実行する際、ディレクトリ内に
setup.py(またはpyproject.tomlなど)が存在している必要があります。これにより、パッケージのメタデータが認識され、インストールが行われます。
- Editable モードとは、パッケージのソースコードとシンボリックリンクを使って環境にインストールする方法です。
2. pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124 の意味
- 目的:
PyTorch および関連ライブラリ(torchvisionとtorchaudio)を、指定されたインデックス URL(ここでは CUDA 12.4 用のビルドが提供されている PyTorch のホイールリポジトリ)からインストールします。 - 詳しい説明:
pip3は Python 3 用の pip を利用していることを示しています(環境によってはpipとpip3が同じ場合もあります)。- コマンドの後半部分
--index-url https://download.pytorch.org/whl/cu124は、PyPI の代わりに、指定した URL からホイール(事前コンパイル済みパッケージ)をダウンロードするように指示しています。
これは特定の環境(例えば、CUDA 12.4 をサポートする GPU ドライバを持つ環境)向けに最適化されたバージョンをインストールするためです。
3. 両者の大きな違い
- 目的の違い:
pip install -e .は、ローカルのパッケージ(開発中のパッケージ)を編集可能な状態でインストールするためのコマンドです。
開発中のパッケージをテストしたり、直接修正を反映させたりする際に使用します。- 一方で、
pip3 install torch torchvision torchaudio --index-url ...は、PyTorch および関連ライブラリを外部リポジトリからインストールするためのコマンドです。
これは特定のビルド(この場合は CUDA 対応のビルド)を利用するために指定された URL からパッケージを取得します。
- 利用シーンの違い:
- 前者は、自作のパッケージや開発中のプロジェクトに対して使われるのに対し、
- 後者は、既存の外部ライブラリをプロジェクトに追加するためのコマンドです。
pip install -e .は開発中のパッケージを編集可能モードでインストールするのに対し、pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124は特定の環境向けの外部ライブラリ(PyTorch 系)をインストールするためのものです。
ですのでどちらでもよく、gradioだけをインストールすればよかった可能性もあります。
PyTorch環境での依存関係の解決とトラブルシューティング
1. 依存関係の確認
まず、プロジェクトの依存関係をチェックしてみます:
pip install -r requirements.txtすると、以下のエラーが発生しました:
ERROR: Could not find a version that satisfies the requirement torch==2.0.1 (from versions: 2.2.0, 2.2.1, 2.2.2, 2.3.0, 2.3.1, 2.4.0, 2.4.1, 2.5.0, 2.5.1)
ERROR: No matching distribution found for torch==2.0.12. エラーを無視する判断
このエラーを無視した理由は以下の通りです:
- 既に最新のPyTorch(CUDA 12.4対応)をインストール済み
- requirements.txtの古いバージョン指定(torch==2.0.1)は、最新のCUDA 12.4との互換性がない
- PyTorchの基本機能は既にインストールされており、バージョンの違いによる重大な互換性の問題は少ないと判断
3. アプリケーションの実行とエラー対応
アプリケーションを実行してみます:
python demo/app_januspro.py新たなエラーが発生:
Traceback (most recent call last):
File "C:\youtube\Janus\demo\app_januspro.py", line 1, in
import gradio as gr
ModuleNotFoundError: No module named 'gradio'このエラーは、本来 pip install -e .[gradio] で解決するはずでしたが、先のPyTorchバージョンの問題で完全なインストールができていなかったことを示しています。
4. Gradioのインストール
シンプルな解決策として、直接Gradioをインストール:
pip install gradioこのアプローチを選んだ理由:
- 最小限の依存関係でアプリケーションを動作させることが可能
- プロジェクトの他の依存関係との競合を避けられる
- 必要なパッケージだけを個別にインストールすることで、トラブルシューティングが容易になる
このように、時には厳密なバージョン指定を無視し、実用的なアプローチを取ることで開発を進められることがあります。ただし、本番環境では適切なバージョン管理が重要です。
依存関係の問題に遭遇した際の解決プロセス
1. 個別インストールの限界
アプリケーションを再度実行してみます:
python demo/app_januspro.pyしかし、次々と新しい依存関係エラーが発生:
- モジュールが見つからないエラーが連鎖的に発生
- 個別にインストールしていくのは非効率的
- パッケージ間の互換性を手動で管理するのは困難
2. 根本的な解決策の発見
プロジェクトの構造を見直すと、setup.pyまたはpyproject.tomlが存在することに気づきます。これは重要な発見です。
pip install -e .このコマンドを使用する理由:
- プロジェクトの全依存関係が
setup.pyやpyproject.tomlで定義されている -eオプション(editable mode)により、開発中のコードの変更がすぐに反映される- パッケージ間の依存関係が自動的に解決される
- バージョンの互換性がプロジェクトの設定ファイルで管理されている
この方法は、個別のパッケージをインストールしていく試行錯誤よりも、はるかに効率的で信頼性の高いアプローチとなります。


GPUメモリ不足の問題と解決方法
1. 最初のエラー発生
まず、以下のコマンドでアプリケーションを実行してみます:
python demo/app_januspro.pyすると、長いエラーメッセージが表示されました:
File "C:\youtube\Janus\venv\Lib\site-packages\gradio\queueing.py", line 625, in process_events
response = await route_utils.call_process_api(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\youtube\Janus\venv\Lib\site-packages\gradio\route_utils.py", line 322, in call_process_api
output = await app.get_blocks().process_api(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\youtube\Janus\venv\Lib\site-packages\gradio\blocks.py", line 2044, in process_api
result = await self.call_function(
^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\youtube\Janus\venv\Lib\site-packages\gradio\blocks.py", line 1591, in call_function
prediction = await anyio.to_thread.run_sync( # type: ignore
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\youtube\Janus\venv\Lib\site-packages\anyio\to_thread.py", line 56, in run_sync
return await get_async_backend().run_sync_in_worker_thread(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\youtube\Janus\venv\Lib\site-packages\anyio\_backends\_asyncio.py", line 2461, in run_sync_in_worker_thread
return await future
^^^^^^^^^^^^
File "C:\youtube\Janus\venv\Lib\site-packages\anyio\_backends\_asyncio.py", line 962, in run
result = context.run(func, *args)
^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\youtube\Janus\venv\Lib\site-packages\gradio\utils.py", line 883, in wrapper
response = f(*args, **kwargs)
^^^^^^^^^^^^^^^^^^
File "C:\youtube\Janus\venv\Lib\site-packages\torch\utils\_contextlib.py", line 116, in decorate_context
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "C:\youtube\Janus\demo\app_januspro.py", line 160, in generate_image
output, patches = generate(input_ids,
^^^^^^^^^^^^^^^^^^^
File "C:\youtube\Janus\demo\app_januspro.py", line 99, in generate
outputs = vl_gpt.language_model.model(inputs_embeds=inputs_embeds,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\youtube\Janus\venv\Lib\site-packages\torch\nn\modules\module.py", line 1736, in _wrapped_call_impl
return self._call_impl(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\youtube\Janus\venv\Lib\site-packages\torch\nn\modules\module.py", line 1747, in _call_impl
return forward_call(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\youtube\Janus\venv\Lib\site-packages\transformers\models\llama\modeling_llama.py", line 589, in forward
layer_outputs = decoder_layer(
^^^^^^^^^^^^^^
File "C:\youtube\Janus\venv\Lib\site-packages\torch\nn\modules\module.py", line 1736, in _wrapped_call_impl
return self._call_impl(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\youtube\Janus\venv\Lib\site-packages\torch\nn\modules\module.py", line 1747, in _call_impl
return forward_call(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\youtube\Janus\venv\Lib\site-packages\transformers\models\llama\modeling_llama.py", line 332, in forward
hidden_states, self_attn_weights = self.self_attn(
^^^^^^^^^^^^^^^
File "C:\youtube\Janus\venv\Lib\site-packages\torch\nn\modules\module.py", line 1736, in _wrapped_call_impl
return self._call_impl(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\youtube\Janus\venv\Lib\site-packages\torch\nn\modules\module.py", line 1747, in _call_impl
return forward_call(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\youtube\Janus\venv\Lib\site-packages\transformers\models\llama\modeling_llama.py", line 276, in forward
key_states, value_states = past_key_value.update(key_states, value_states, self.layer_idx, cache_kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\youtube\Janus\venv\Lib\site-packages\transformers\cache_utils.py", line 450, in update
self.value_cache[layer_idx] = torch.cat([self.value_cache[layer_idx], value_states], dim=-2)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
RuntimeError: CUDA error: out of memory
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.2. エラーの解析
提供されたエラーメッセージの最後の部分に以下のような記述があります:
RuntimeError: CUDA error: out of memoryこれは、CUDA(NVIDIAのGPUアクセラレーションプラットフォーム)がメモリ不足になっていることを示しています。具体的には、PyTorchを使用してモデルを実行する際に、GPUのメモリが足りなくなり、処理を続行できなくなったために発生しています。
3. 解決方法:モデルを軽量化する
それでは、以下の手順で問題を解決していきましょう:
- まず、
app_januspro.pyファイルをテキストエディタで開きます
- メモ帳でも可能ですが、VSCodeなどのコードエディタを推奨
- ファイル内で以下の行を探します:
model_path = "deepseek-ai/Janus-Pro-7B"- この行を、より軽量なモデルを使用するように変更します:
model_path = "deepseek-ai/Janus-Pro-1B"- ファイルを保存します
4. 変更したプログラムを実行
モデルを変更した後、再度実行してみましょう:
python demo/app_januspro.pyこの変更により:
- GPUメモリの使用量が大幅に減少
- 一般的なGPUでも動作可能に
- 開発やテストがスムーズに
このように、大きなモデル(7B)から小さなモデル(1B)に変更することで、一般的なPCでも動作させることができます。モデルのサイズが小さくなることでパフォーマンスは若干低下しますが、開発やテストには十分な性能を維持できます。

GPUメモリ使用量の最適化:画像生成数の調整
1. 初期状態の確認
軽量モデル(1B)に変更後、画像生成には成功しましたが、デフォルトで5枚の画像を同時生成するように設定されていることに気づきました。これは大きなGPUメモリを消費する原因となっています。
2. より高品質なモデルへの強い思い
7Bモデルは1Bモデルと比較して:
- より高品質な画像生成が期待できる
- 豊富なパラメータによる表現力の向上
- より詳細な特徴の捉え方が可能
このような利点から、どうしても7Bモデルでの実行にこだわりを持ちました。
3. コードの詳細な分析
app_januspro.pyを詳しく調査したところ、2つの異なる形式でparallel_sizeが設定されていることを発見しました:
- 型定義付きのパラメータ設定:
parallel_size: int = 5, # 関数やクラスの引数定義- 変数への直接代入:
parallel_size = 5 # 通常の変数代入これらは似て非なるもので、Pythonの型ヒントと実際の値の代入という異なる役割を持っています。
4. 必要な修正
両方の箇所を1に変更する必要があります:
# 型定義付きのパラメータを変更
parallel_size: int = 1,
# 変数への代入を変更
parallel_size = 1そして、モデルを元の大きなサイズに戻します:
model_path = "deepseek-ai/Janus-Pro-7B"このように、コードの詳細な理解と適切な修正により、高品質な7Bモデルの使用を試みることができます。

より効率的なJanusの活用方法:上級者向けの最適化テクニック
1. モデルの最適化戦略
PyTorch JITの活用
# モデルをTorchScript形式に変換
scripted_model = torch.jit.script(model)- 推論速度の向上
- メモリ使用量の最適化
- デプロイメントの簡素化
精度と効率のバランス
# Half Precision(FP16)の使用例
model = model.half() # または
model = model.to(torch.bfloat16)- メモリ使用量を最大50%削減可能
- 演算速度の向上
- BFloat16はFP16より数値安定性が高い
2. ハードウェアとインフラの選択
マルチGPU対応
# モデルの分散配置
model = torch.nn.DataParallel(model)
# または
model = torch.nn.parallel.DistributedDataParallel(model)Docker環境の構築
FROM pytorch/pytorch:latest
# GPUサポート
ENV NVIDIA_VISIBLE_DEVICES all
ENV NVIDIA_DRIVER_CAPABILITIES compute,utility3. パフォーマンス最適化
Attention Cacheの活用
# キャッシュを使用した推論
outputs = model.generate(
input_ids,
use_cache=True,
max_new_tokens=100
)Dynamic Batching
# バッチサイズの動的調整
def dynamic_batch_size(input_length):
return min(32, 2048 // input_length)これらの最適化テクニックは、使用環境やニーズに応じて適切に組み合わせることで、Janusの性能を最大限に引き出すことができます。特に大規模なデプロイメントや、リソースが制限された環境での運用時に効果を発揮します。
また、これらの最適化は段階的に適用することをお勧めします。各テクニックの効果を測定しながら、必要な最適化のみを適用することで、安定性とパフォーマンスの最適なバランスを見つけることができます。


