この記事で学べること

  • Hugging Faceのプルリクエスト(PR)から最新モデルのコードを導入する方法
  • Qwen3.5をローカル環境で動作させるための環境構築手順
  • 推論を効率化するための実行コードとメモリ節約のテクニック

前提条件

  • Python 3.10以上がインストールされた環境(LinuxまたはWSL2推奨)
  • NVIDIA製GPU(VRAM 16GB以上を推奨。モデルサイズによりますが、開発初期は余裕が必要です)
  • Hugging Faceのアカウントおよびアクセストークン
  • Gitの基本的な操作知識

なぜこの知識が重要なのか

みなさんも経験ありませんか?「新しいモデルが発表されたけれど、ライブラリの公式アップデートが来るまで数週間待たされる」というあのもどかしい感覚。私もSIer時代、新しい技術を検証したくても社内の承認やツールの更新待ちで、結局世の中のトレンドから一歩遅れてしまった苦い記憶があります。

しかし、AIの世界、特にローカルLLM(大規模言語モデル)の界隈は驚異的なスピードで動いています。今回、Alibaba Cloudの強力なモデルシリーズであるQwenの最新版「Qwen3.5」に向けたプルリクエストがHugging FaceのTransformersリポジトリで公開されました。これは、公式リリースを待たずとも、開発の最前線にあるコードを使ってモデルを動かせるチャンスを意味します。

Qwenシリーズは、日本語を含む多言語対応が非常に優秀で、ベンチマークスコアでもLlama 3などと肩を並べる存在です。いち早くこの新モデルを触っておくことは、技術者としての優位性を築くだけでなく、次世代のAIがどのような進化を遂げているのかを肌で感じる絶好の機会になります。公式のドキュメントが整備される前に、開発中のコードを読み解きながら動かす経験は、エンジニアとしての地力を確実に引き上げてくれるはずです。

Step 1: 環境準備

まずは、通常のライブラリインストールではなく、開発中のブランチから直接インストールするための準備を行います。既存の環境を壊さないよう、仮想環境を作成することをお勧めします。

# 仮想環境の作成と有効化
python3 -m venv qwen35-env
source qwen35-env/bin/activate

# 必須となる基礎ライブラリのインストール
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
pip install accelerate sentencepiece

次に、Qwen3.5のサポートが含まれている特定のTransformersブランチをインストールします。Redditの投稿にある通り、Hugging Faceのプルリクエスト番号(例:43830)を対象にします。

# Transformersをソースからインストール
# PRの番号やリポジトリURLは適宜最新のものに置き換えてください
git clone https://github.com/huggingface/transformers.git
cd transformers
# 今回のQwen3.5対応が含まれるプルリクエストのブランチをチェックアウト
# (注意:実際のPR番号やユーザー名はRedditの最新情報を参照してください)
git fetch origin pull/43830/head:qwen35-preview
git checkout qwen35-preview

# 編集可能モードでインストール
pip install -e .

これで、あなたの環境のTransformersライブラリは、Qwen3.5を認識できる特別な状態になりました。SIer時代、手動でパッチを当てていた頃を思い出して少し懐かしくなりますが、Gitを使えばこれほどスマートに最新コードを試せるのは本当に良い時代ですね。

Step 2: 基本設定

次に、モデルを読み込んで推論を行うためのPythonスクリプトを作成します。Qwen3.5は非常に高機能ですが、その分モデル構造が複雑化している場合があります。

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer

# モデルIDの指定
# ※正式リリース前は特定の開発者リポジトリにある場合があります
model_id = "Qwen/Qwen3.5-7B-Instruct"

# トークナイザーの読み込み
tokenizer = AutoTokenizer.from_pretrained(model_id, trust_remote_code=True)

# モデルの読み込み設定
# device_map="auto" でGPUへ自動割り当て
# torch_dtype=torch.bfloat16 でメモリ消費を抑えつつ精度を維持
model = AutoModelForCausalLM.from_pretrained(
    model_id,
    device_map="auto",
    torch_dtype=torch.bfloat16,
    trust_remote_code=True
)

print("モデルの読み込みが完了しました。")

ここで重要なのが trust_remote_code=True です。開発中のモデルは、Transformers本家に取り込まれる前の独自のカスタムコード(modeling_qwen.pyなど)を必要とすることが多いため、このフラグを立てないとエラーになります。セキュリティ上の理由で敬遠されることもありますが、公式に近い開発ブランチであれば、内容を確認した上で使用するのが一般的です。

Step 3: 実行と確認

いよいよ推論を実行します。Qwenシリーズの特徴である「対話形式」のテンプレートを正しく適用することが、期待通りの回答を得るコツです。

# プロンプトの設定
prompt = "あなたは優秀なアシスタントです。Qwen3.5の主な特徴について日本語で解説してください。"
messages = [
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": prompt}
]

# チャットテンプレートの適用
text = tokenizer.apply_chat_template(
    messages,
    tokenize=False,
    add_generation_prompt=True
)

# 入力テンソルの作成
model_inputs = tokenizer([text], return_tensors="pt").to(model.device)

# テキスト生成の実行
generated_ids = model.generate(
    **model_inputs,
    max_new_tokens=512,
    do_sample=True,
    temperature=0.7,
    top_p=0.9
)

# 結果のデコード
response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
print(f"Response:\n{response}")

実行して、Qwen3.5が自らの特徴をスラスラと答え始めたら成功です。もし、ここで意味不明な文字列が出てきたり、途中で途切れたりする場合は、トークナイザーの設定やテンプレートの適用が間違っている可能性があります。個人的には、この「最初の返答」が返ってくる瞬間が一番ワクワクします。

Step 4: 応用テクニック

ローカルで動かす際、最大の壁となるのがVRAM(ビデオメモリ)の容量ですよね。7Bクラスならまだしも、大きなモデルを試すには工夫が必要です。そこで「bitsandbytes」ライブラリを使った4bit量子化を導入しましょう。

pip install bitsandbytes

スクリプトを以下のように修正します。

from transformers import BitsAndBytesConfig

# 量子化設定
quantization_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_compute_dtype=torch.bfloat16,
    bnb_4bit_quant_type="nf4",
    bnb_4bit_use_double_quant=True
)

# 量子化してモデルを読み込み
model = AutoModelForCausalLM.from_pretrained(
    model_id,
    quantization_config=quantization_config,
    device_map="auto",
    trust_remote_code=True
)

この設定を使うだけで、VRAM消費量を大幅に削減できます。16GB程度のGPUでも、より大きなモデルや長いコンテキストを扱えるようになるので、ぜひ試してみてください。SIerでの開発なら「スペック不足です」の一言で終わってしまうような場面でも、こうしたテクニックで突破できるのがローカルLLM運用の醍醐味ですね。

よくあるエラーと対処法

エラー1: NotImplementedError または KeyError

KeyError: 'qwen2_5' or 'qwen3'

原因: Transformersのバージョンが古く、新しいモデルアーキテクチャを認識できていません。 解決策: Step 1に戻り、PRブランチが正しくチェックアウトされているか確認してください。pip show transformers で、インストール先がローカルのGitディレクトリになっているか(Editable modeか)をチェックします。

エラー2: CUDA Out of Memory (OOM)

torch.cuda.OutOfMemoryError: CUDA out of memory.

原因: GPUのメモリが不足しています。 解決策: Step 4で紹介した4bit量子化を試してください。それでもダメな場合は、device_map="cpu" を検討するか、モデルのサイズ(パラメータ数)を小さいものに変更する必要があります。

エラー3: 警告:trust_remote_code

ValueError: The model class you are passing has a `config_class` attribute that is not consistent with the model class you are passing.

原因: カスタムコードの読み込みが許可されていません。 解決策: AutoModelAutoTokenizer の両方の引数に trust_remote_code=True を追加してください。

ベストプラクティス

  1. ブランチの更新を追う: プルリクエストは日々更新されます。一度動いたからと安心せず、定期的に git pull を行い、最新の修正を取り込みましょう。
  2. システムプロンプトの活用: Qwenはシステムプロンプトによる指示に従順です。英語の方が精度が高い場合は、システムプロンプトだけ英語にするなどの工夫も有効です。
  3. Flash Attentionの導入: 推論速度を上げたい場合は pip install flash-attn を行い、モデル読み込み時に attn_implementation="flash_attention_2" を指定することをお勧めします。ただし、GPUがAmpere世代以降(RTX 30シリーズなど)である必要があります。

まとめ

Qwen3.5のPRを追いかけ、実際に動かしてみるという今回のチュートリアルはいかがでしたか?

新しいモデルが登場するたびに、私たちの可能性は大きく広がります。単に「すごいAIが出た」とニュースを見るだけでなく、実際に自分の手元で動かし、その感触を確かめる。このプロセスこそが、AI技術を自分の血肉にする唯一の方法だと私は信じています。

正直なところ、開発中のコードを動かすのは一筋縄ではいかないことも多いです。依存ライブラリのバージョンが衝突したり、ドキュメントにないエラーに遭遇したり…。でも、それを一つずつ乗り越えた先にある「誰もまだ体験していないモデルとの対話」には、何物にも代えがたい喜びがあります。

かつての私がそうだったように、もし皆さんが「難しそうだな」と感じていたとしても、この記事のステップを一つずつ進めれば、必ず動かせるはずです。失敗しても大丈夫。そのエラーメッセージこそが、あなたが最先端にいる証拠なのですから。

ぜひ、Qwen3.5を皆さんのローカル環境で飼いならしてみてくださいね。驚くほど賢くなった彼らとの対話が、あなたの創作や開発を大きく加速させてくれることでしょう。

感想や「こんなエラーが出た!」という報告も、ぜひコメントやSNSで教えてください。みんなで知見を共有して、日本のAIコミュニティを盛り上げていきましょう。


📚 さらに学習を深めるためのリソース

この記事の内容をより深く理解するために、以下の書籍・教材がおすすめです:

🔍 Amazonで「AI 機械学習 入門書」を検索 🔍 楽天で検索

※上記リンクはアフィリエイトリンクです。