OpenAIのOSSモデルgpt-oss-20bを試した

背景や目的


OpenAIのモデル(GPT-4.1他)はAPI経由で利用するのが普通でしたが、このたびOSS版が登場しました。→リリース記事

既に試した方も沢山いらっしゃると思いますが、私も本番ツールで使えそうかどうか、使ってみました。今回は20B版(gpt-oss-20b)での生成結果を、方法も含めてご紹介します。

手順サマリー


今回は環境として Google Colab(Pro+)を利用し、以下の手順で進めます。

1.環境の準備
2.モデルのロード
3.回答生成の動作確認

順番に紹介してゆきます。

1.環境の準備


最初に、Google Colab上で.ipynbファイルを開き、適当な名前で保存します。

・上部メニューから[Runtime] → 「Change runtime type」押し、以下の設定を行います。

L4 GPUを使います

・次に、以下のコードをセルに入力して実行し、必要なライブラリをインストールします。

Google Colabo (python)
!pip install --upgrade torch
#PyTorchを最新版にアップデートしておく。

!pip install git+https://github.com/huggingface/transformers triton==3.4 kernels
#transformers、triton、kernelsをインストール。

!pip uninstall torchvision torchaudio -y
#今回は不要なため削除。

それでは、環境とランタイムの準備が整ったので、次に進みます。

2.モデルのロード


HuggingFaceからgpt-oss-20bモデル用の3つのモデルテンソルファイル等をダウンロードしてロードします。

・以下のコードをセルに入力して実行します。

Google Colabo (python)
###gpt-oss-20b [モデルロード]
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch

model_name = "openai/gpt-oss-20b"

tokenizer = AutoTokenizer.from_pretrained(model_name, use_fast=True)

model = AutoModelForCausalLM.from_pretrained(
    model_name,
    torch_dtype=torch.bfloat16, 
    device_map="auto",
    trust_remote_code=True,        
    low_cpu_mem_usage=True,
    use_safetensors=True,
)

print("Loaded!!")

「Loaded」が表示されて、モデルがロードされました!

3.回答生成動作確認


ロードされたOSSモデルにシステムロールと質問を入力して回答生成します。

・以下の通りコードをセルに入力して実行します。messagesでロールと質問を入力します。

Google Colabo (python)
###gpt-oss-20b [回答生成]
import re

def extract_final(text: str) -> str:
    # assistantfinal / final / assistant 以降を取得
    m = re.search(r'(?s)(?:assistantfinal|final|assistant)(.*)', text)
    return m.group(1).strip() if m else text.strip()

# プロンプトを定義
messages = [
    {"role": "system", "content": "あなたは日本語が得意なアシスタントです。事実に基づき簡潔に回答してください。"},
    {"role": "user", "content": "東京の見どころを200文字程度で教えてください。"}
]

# Chatテンプレートで入力を作成
inputs = tokenizer.apply_chat_template(
    messages,
    add_generation_prompt=True,
    tokenize=True,
    return_dict=True,
    return_tensors="pt",
).to(model.device)

# 生成
out = model.generate(**inputs, max_new_tokens=5000, do_sample=False)

# 生成部分のみデコードして表示
gen_text = tokenizer.decode(out[0][inputs["input_ids"].shape[-1]:], skip_special_tokens=True)
print(gen_text)
#res_text = extract_final(gen_text)
#print(res_text)

・shift+enterで実行すると、以下のように回答文が生成されました。

生成文には、最終回答に至るまでのCoT(Chain of Thought)部が含まれていますね。文字数カウントや内容検討の思考過程がそのまま出力されています。
(CoT部をカットした表示は、上記コード中の30と31行目をアンコメントすればできます。)

速度は、CoT部含めてカウントすると0.06秒/文字(84秒/1359文字)と、速いと思いました。ちなみに、CoT部をカットした部分のみで考えると 0.47秒/文字(84秒/178文字)となります。

以下は処理中のResourcesのグラフです。ご参考まで。

(補足) gpt-oss-20bはMXFP4で量子化されているとの事で、L4やA100で動くか心配でしたが、とにかく生成は出来ました。

まとめ


Colab 上でgpt-oss-20b版モデルをロードして、回答生成までざっとしてみました。

生成時間はL4で1文字あたり0.06秒なので、AWSのL4インスタンスでAPI化してもそこそこ速く動きそうです。ただ、思考部分(Chain of Thought)が不要な場合はその分がオーバヘッドになりますね。

GPT-4.1のような優秀なモデルと同じように、RAG用のモデルとして機能するか、については、また改めて、自社のRAG型AIチャットボットに組み込んで試験したいと思います。

OSS AI ಮೋಡೆಲ್ಸ್ ಗಳ್ಲಲಿ ಸುಧಾರಣೆಗಳನ್ನು ಆಶಿಸೋಣ.
(OSS AIモデルの改善を期待しましょう。)

ご連絡フォーム


フィードバックを是非お願いします。
本記事の方法での問題点や、よりよい方法のアイデアを頂けると大変助かります。

この記事に関して

その他のご連絡

DevAIsをもっと見る

今すぐ購読し、続きを読んで、すべてのアーカイブにアクセスしましょう。

続きを読む