🔖

Qwen3-Swallow & GPT-OSS-Swallow

に公開

はじめに

東京科学大学 修士2年の藤井です。

本日(2026/02/20)、Swallow LLM Projectから、Qwen3-Swallow-v0.2GPT-OSS-Swallow-v0.1をリリースさせていただきました。これらのモデルは、それぞれAlibaba Qwen3OpenAI GPT-OSSから日本語、英語、数学、コード、科学分野のデータセットを用いて、継続事前学習(Continual Pre-Training)SFT(Supervised Fine-Tuning) を行い、その後、数学データセットを用いてRLVR(Reinforcement Learning with Verifiable Rewards) を行ったモデルになります。

従来のSwallowモデル同様に日本語能力の強化がなされていますが、本モデルは、Qwen3やGPT-OSSなどのTopクラスの性能を誇るLLMから数学、コード能力を損なわずに学習を行うことに成功した点、そして自前のPost-Trainingレシピ(Reasoning SFT & RLVR)により、Qwen3、GPT-OSSのPost-Training後のモデルの性能に追いつくことに成功した点の2点で従来のSwallowモデルよりも優れた性能となっています。

今回リリースしたQwen3-Swallow、GPT-OSS-Swallowは、いずれもApache-2.0ライセンスでリリースされています。商用・研究・個人的用途で無料かつ自由にダウンロード、カスタマイズ、ホスティングすることが可能です。

Swallow LLM Project公式のプロジェクトページでは、詳細な評価結果や、モデル性能に関する情報が記載されています。ぜひご覧ください。本ブログでは、リリースモデルの概要と、それぞれのモデルを構築する際に利用したソフトウェアライブラリの詳細および、高速化手法など学習の詳細について解説を行います。

評価結果概要

評価結果の詳細についてはQwen3-Swallow 公式ページおよびGPT-OSS-Swallow 公式ページや、Swallow Leaderboardを参照ください。本セクションでは、それぞれのフラッグシップモデルについてのみ簡単な説明を行います。

Qwen3-Swallow

以下にQwen3-Swallow-32B-RL-v0.2の日本語および英語での評価結果を示します。

まず着目頂きたい点としては、大規模(200Bトークン超)な継続事前学習を行い日本語能力を強化した後でありながらも、日本語タスク平均および英語タスク平均でAlibaba Qwen3-32B(Post-Training済モデル)の性能を上回っている点です。昨今のTop Openモデルは数学、コード、科学技術などに関する高難易度のタスクの性能が高く従来の継続事前学習では、これらの性能が損なわれる代わりに日本語性能が上がるトレードオフが発生していました。しかしながら、今回Swallow LLM Projectでは後述する工夫によりこれらの性能低下を引き起こさず、JamC-QA(日本語Q&A)性能を上げることに成功しました。


Qwen3-Swallow-32B-RL-v0.2より日本語タスクの評価結果


Qwen3-Swallow-32B-RL-v0.2より英語タスクの評価結果

また、2025年5月にリリースされたAlibaba Qwen3と比べることになりますが、分析の結果、当時のQwen3 Teamが利用していたPost Trainingレシピ(アルゴリズムとデータセットを含む)と同等かそれ以上のPost TrainingレシピをSwallow LLM Projectというアカデミックな研究グループが再現することに成功したという点も今回の成果として挙げられます。

GPT-OSS-Swallow

続いてGPT-OSS-Swallow-120B-RL-v0.1の日本語および英語の評価結果を示します。
下図に示すようにGPT-OSS-Swallow-120B-RL-v0.1は、学習開始モデルであるGPT-OSS-120Bを日本語平均および英語平均ともに上回っています。特にJamC-QA(日本語Q&A)において顕著な改善を示しており、継続事前学習により日本語能力の強化に成功したことを表しています。また、日本語性能を上昇させた代わりに従来であれば低下しがちであった英語タスクにおいても、継続事前学習およびReasoning SFT時に性能低下を抑えるためのデータ側の工夫とRLVRの成功により元モデルと遜色ない性能を実現できています。

リリースモデル

本セクションでは、今回リリースしたQwen3-SwallowおよびGPT-OSS-Swallowのモデル群について概説を行います。

Qwen3-Swallow

Qwen3-Swallow(正式名称: Qwen3-Swallow-v0.2)は、継続事前学習モデル(CPT models) 3つ、SFTモデル(SFT models) 3つ、RLモデル(RLVR models) 3つと、量子化モデル(Quantized models) 6つの総計 15個のモデルから構成されています。(下図)

Swallow LLM Projectで開発した継続事前学習済みモデルを利用して特定ドメインへの特化を行いたい場合はCPTモデルを、微小な修正のみ行いたい場合、もしくはそのまま利用されたい方はRLモデル、またはSFTモデルを利用してください。
ベンチマーク上の性能が最も優れているのはRLモデルですので、RLモデルを利用することが推奨されています。

GPT-OSS-Swallow

GPT-OSS-Swallow(正式名称: GPT-OSS-Swallow-v0.1)は、SFTモデル(SFT models) 2つ、RLモデル(RLVR models) 2つの総計 4個のモデルから構成されています。(下図)

継続事前学習モデル(CPT models)も内部的には存在するのですが、学習を開始したgpt-oss-20bおよびgpt-oss-120bにはBaseモデルが存在せず、Post Trainingを施したモデルしかOpenAIが公開していないこともあり、純粋な継続事前学習モデルを得ることはできません。そのため、今回のリリースではCPTモデルを除きリリースを行いました。

Qwen3-Swallow

本セクションでは、Qwen3-Swallowを構築するにあたり利用したソフトウェアライブラリ、ハイパーパラメーター、高速化手法および知見について説明を行います。

また学習の概要は以下のようになっています。

Continual Pre-Training

本セクションでは、Qwen3-Swallowの継続事前学習(Continual Pre-Training)について解説を行います。

Training Library & Distributed Training

Qwen3-Swallowの継続事前学習には、NVIDIA Megatron-LM を用いました。Swallow LLM Projectでは、2023年9月より一貫してMegatron-LMを利用しています。学習に利用する分散学習設定は、Denseモデルでは、Data Parallelism(データ並列)、Tensor Parallelism(テンソル並列)、Pipeline Parallelism(パイプライン並列)、Context Parallelism(コンテキスト並列)から並列次元数を決めて学習を行いました。(なお、Sequence Parallelism(シークエンス並列)は、Tensor Parallelism size > 1の場合は常に有効にしています)
また、MoEモデル(30B-A3B)の学習では、これにExpert Parallelism(エキスパート並列)も利用して学習を行っています。

なお、分散学習設定の決定はMemory消費量を予測する研究を参考に開発した分散学習設定を半自動で探索するツールを利用し、決定しています。

また、本リリースで開発したすべてのモデルの学習は、Pythonの仮想環境ベースでの環境ではなく、NVIDIA NGC PyTorchコンテナまたはNGC NeMoコンテナを利用して行っています。これは厳密な再現性の確保と、GPUクラスターの多様化により従来の仮想環境ベースでの環境構築では、作業者の負担が増えすぎたことに起因しています。
Continual Pre-Training, SFT、RLVRすべてにおいて、コンテナベースでの動作確認を行っていますので今後は全面的にコンテナベースの学習に切り替える予定です。これに伴いEnvironment Modulesを自前で整える必要性が低下し、関連するクラスターメンテナンスコストが下がり、よりモデル開発に集中できるようになることが期待されています。

Low Precision Training

Swallow LLM Projectでは、2024年春頃からHopper世代のNVIDIA GPUから導入されたFP8の利用を検討してきました。従来のLLMの学習はBF16/FP16と一部数値精度に敏感な部分をFP32で処理するMixed Precision(混合精度)学習が用いられてきましたが、Low Precision Training(低精度学習)では、さらに一部の演算(具体的にはMLPとAttention LayerのLinear層における行列積(MatMul))をFP8 Tensor Coreを利用して行うことを目指しています。


緑の部分がFP8 Tensor Coreを利用して演算される領域 (2026 GTC Qwen3-Swallow: Continual Pre-Training of Japanese–English Thinking LLMs with Megatron-LMポスターより)

2022年に公開されたFP8 Formats for Deep Learningでは、FP8を利用しても学習が従来と同等の性能に収束することが示されていますが、実験で利用されている学習トークン数は少なく、実際にはOutlier Features(はずれ値)に起因するScaling Factor(数値をdynamic rangeの範囲内に移動するための係数)の増加により他の値が潰れてしまうなどの原因により、下図に示すように継続事前学習で用いると100Bトークン未満の学習であっても頻繁なLoss Spikeを起こし、場合によっては回復不能なLoss Divergenceが発生することが実験を行う人々の間では知られていました。


Llama-3.1-70Bからの継続事前学習においてBF16/FP32 Mixed PrecisionとLinear層の演算にのみFP8を利用した場合のTraining Loss推移の比較

また以下の論文に示すように、FP8の導入は、従来のPer-Tensor Delayed Scalingでは、Loss Spikesだけでなく、Downstream Task Performanceの低下も招くことが判明しています。
https://arxiv.org/abs/2411.08719

そこでSwallow LLM Projectでは、2025年春にNVIDIAがTransformerEngineに導入したBlockwise FP8(E4M3) と呼ばれるTensorをさらに小さいサイズで分割したブロックと呼ばれる単位ごとにScaling Factorを有するfine-grained Scaling手法を採用し、Outliersの影響を最小化しながら学習することを選択しました。下図に示すように200Bトークン規模での学習でもこの手法を利用することでLoss SpikesもDownstream Task Performanceの低下も起こさず学習することができることを検証しました。(本研究の成果は2026年3月にアメリカ カリフォルニア州 San Joseで開催されるNVIDIA GTC2026でSwallow LLM Projectから発表予定です。)

今回、Qwen3-Swallowの構築では、すべてのモデルの継続事前学習においてBlockwise FP8(E4M3)を採用し、20%程度の TFLOP/s/GPUの向上を達成しました。

Training Dataset

以下に、継続事前学習(Continual Pre-Training)で利用したデータセットの内訳を示します。
Qwen3-Swallowは、約209.7Bトークンの継続事前学習により構築されています。
モデルカードのTraining Datasetsセクションにも記載がありますが、我々は、日本語コーパス、対訳コーパス(日英)、英語コーパス、数学、コードコーパス、STEM、Reasoning、General Chatデータを利用してQwen3-Swallow-CPTモデルを構築しました。

SwallowCorpus-v3.2SwallowCorpus-v3.2 Q&Aは、Swallow LLM Projectが構築した独自の高品質日本語コーパスになります。また、翻訳性能の改善のため、従来のLaboro ParaCorpusに加え、コミュニティーの対訳コーパスであるKaken ParaCorpus(Ja-En)を利用しています。

また、Qwen3の高い数学、コード能力を継続事前学習時に損なわないために、Swallow LLM Projectが独自作成したSwallowCode-v2およびSwallowMath-v2 を学習に利用しています。こちらのデータセットはApache-2.0 Licenseでどなたでも利用できるようになっています。

加えて、継続事前学習時に後段のPost Trainingで学習する形式と同様のChat Templateを付与した形式でSTEM、Reasoning、General Chat(一般対話)の分野のデータを混合して学習しています。

Hyperparameters

以下に、学習で利用したハイパーパラメーターを記します。我々の実験と似たシチュエーションまたは再現実験をされる方は参考にしてください。

共通パラメーター
Hyper parameter name value
GBS(Global Batch Size) 256
Context Length 32,768(32K)
LR Warmup Iterations 1,000
Weight Decay 0.1
Gradient Clipping 1.0
attention dropout 0.0
hidden dropout 0.0
gradient dtype FP32
AdamW beta1 0.9
AdamW beta2 0.95
AdamW epsilon 1.0E-8
8B
Hyper parameter name value
LR(Learning Rate) 1.50E-5
minLR(minimum Learning Rate) 1.50E-6
30B-A3B
Hyper parameter name value
LR(Learning Rate) 2.50E-5
minLR(minimum Learning Rate) 2.50E-6
32B
Hyper parameter name value
LR(Learning Rate) 1.00E-5
minLR(minimum Learning Rate) 1.00E-6

SFT

次のこのセクションではQwen3-SwallowのReasoning SFTについて解説を行います。

Training Library

Qwen3-SwallowのReasoning SFTは、NVIDIA Megatron-LM独自の修正を行い実施しました。
Megatron-Core 0.15.0現在、Context Parallelism Sizeを1より大きくした状態でSFT機能を利用すると以下のようにLossにNaNが発生します。

このContext Parallelism使用時にLossがNaNになる問題の原因は以下の図に集約されています。
下図のContext Parallel = 4の場合に着目すると、loss maskが0となっているUser Inputだけを担当しているcontext parallel rankが存在しています。そのrankでは、loss mask = 0なので、sum lossも0ですし、lossを計算する対象のtoken数も0になるので、\text{val} = \frac{\text{sum loss}}{\text{tokens}}で計算される値は0/0となりゼロ除算(Zero Division)が発生してしまいます。このとき、Errorが発生すればよいのですが、PyTorchにおいてこの演算はNaNになります。このNaNが、その後All Reduceにより他のNaNでない数値と演算処理を施されるとその結果もNaNとなります。これにより、Training LossがNaNになっていた訳です。

Megatron-LMにおけるSFT学習時のLoss NaN問題の模式図

この問題に対応するためにMegatron-LMのSFTロジックに修正を行い、以下のように無事に学習を遂行することができました。こちらのデバッグ詳細について別途別の記事で解説しようと考えています。

Reasoning SFT Dataset

Swallow LLM Projectでは、NVIDIA Nemotron-Post-Training-Dataset-v1のmath、code, stemサブセットを元にして下図のようにSwallow-Nemotron-Post-Training-Dataset-v1を構築しました。

Nemotron-Post-Training-Dataset-v1のThinking TrajectoryおよびAssistant Outputは、DeepSeek-R1-0528により合成されていますが、Thinking Trajectoryが冗長であるという問題がありました。そこで、User Inputに対応するThinking TrajectoryとAssistant OutputをGPT-OSS-120B reasoning effort mediumで再合成し、独自のReasoning SFTデータセットを構築しました。
また、この際、GPT-OSSのchat template規則に沿わない出力(Thinking Trajectoryが閉じていない等)をフィルタリングし、有効な例のみを抽出しSwallow-Nemotron-Post-Training-Dataset-v1を構築しました。

また、日本語のUser Inputに対して日本語のAssistant Outputを返すように、Nemotron-Post-Training-Dataset-v1のUser InputをGPT-OSS-120Bで日本語に翻訳し、そのデータを元にThinking TrajectoryとAssistant Outputを生成させました。この際、プロンプトによりGPT-OSS-120Bに日本語で回答することを誘導しましたが、Thinking Trajectoryは日本語混ざりの英語となり、Assistant OutputだけでなくThinking Trajectoryも日本語化することはできませんでした。こちらについては今後の課題としています。(ChatGPT、Claude、Geminiなどの商用モデルでは、英語でのThinking Trajectoryでも日本語の応答を問題なく返せていることを踏まえ、Thinking Trajectoryは必ずしも日本語である必要性は高くないと判断し、今回はThinking Trajectoryの日本語化にはこだわりませんでした。)

Hyper Parameters

以下にQwen3-SwallowのReasoning SFTで利用したハイパーパラメーターを示します。

共通パラメーター
Hyper parameter name value
GBS(Global Batch Size) 64
Context Length 32,768(32K)
Weight Decay 0.1
Gradient Clipping 1.0
attention dropout 0.0
hidden dropout 0.0
gradient dtype FP32
AdamW beta1 0.9
AdamW beta2 0.95
AdamW epsilon 1.0E-8
8B
Hyper parameter name value
LR(Learning Rate) 1.50E-5
minLR(minimum Learning Rate) 1.50E-6
30B-A3B
Hyper parameter name value
LR(Learning Rate) 1.50E-5
minLR(minimum Learning Rate) 2.50E-6
32B
Hyper parameter name value
LR(Learning Rate) 1.00E-5
minLR(minimum Learning Rate) 1.00E-6

RLVR

本セクションでは、Qwen3-Swallow-RLを構築するために行ったRLVRについて解説を行います。

Training Library

Qwen3-SwallowのRLVRには、学習ライブラリとしてslimeを利用しました。

slimeでは、TrainerのBackendとしてMegatron-CoreとPyTorch FSDPが指定可能です。
Megatron-Coreが対応しているモデルの場合は、Megatron-Coreを利用した方がThroughputは改善しますが、Rollout Workerが学習全体のボトルネックになっている場合や、colocate設定によりCPU Offload/Onloadがボトルネックになっている場合は、--train-backendを過度に気にする必要はありません。

学習アルゴリズムとしてはGRPOをベースにDAPOから、Clip-Higher、Dynamic Samplingを採用しています。(DAPO論文のSection 3.1, 3.2に対応します。)また、Truncated Importance Sampling(TIS)も採用しています。

Training Data

学習データとして、Dolci-Think-RL-7Bに含まれるMath、Coding、Precise Instruction Following、General ChatからMathのみを抽出し、RLVRを行いました。また、slime側で指定可能なprompt key name(input key name)、labels key name(ground truth answer key name)とデータの構成を合わせる必要があります。

Dolci-Think-RLデータセットでは、ground_truthとpromptが利用されている上に、ground_truthのデータ形式はlist[str]であるため、これをstringに変換する前処理を行う必要がありました。

データセットのデータ形式はHuggingFaceのDataViewerより以下のように確認できますので、RLVRを行う際は、ご注意ください。

https://huggingface.co/datasets/allenai/Dolci-Think-RL-7B

また、slimeにおいて、学習データを読み込む際のkey nameを変更する際は以下のように指定可能です。

--input-key prompt \
--label-key label \

GPT-OSS-Swallow

本セクションでは、GPT-OSS-Swallowを構築するにあたり利用したソフトウェアライブラリおよび知見について説明を行います。(Qwen3-Swallowと重複する内容については省略しています。)

Continual Pre-Training

Training Library

以下の記事に記載のように、学習を開始した当時は、Megatron-LMがGPT-OSSの学習をサポートしていませんでした。そこで、NVIDIA NeMo Frameworkと、GPT-OSS専用のNGC NeMoコンテナを利用して学習を行いました。詳細については以下の記事を参照いただけますと幸いですが、当時配布されていた実装およびコンテナには大規模な学習を行う上では、問題になる点がいくつかあり、これらを解決することでGPT-OSS-Swallowの継続事前学習を可能としました。

https://zenn.dev/turing_motors/articles/81cf3128b22c63

また、後続研究のために我々がGPT-OSS-Swallowを学習する上で利用したNVIDIA NeMo Frameworkのfork版の実装を以下で公開します。こちらを利用すれば、同様にGPT-OSSから継続事前学習を行うことが可能です。
https://github.com/okoge-kaz/NeMo-gpt-oss

Hyper Parameters

以下にGPT-OSS-Swallowの継続事前学習で利用したハイパーパラメーターを示します。

共通パラメーター
Hyper parameter name value
GBS(Global Batch Size) 256
Context Length 32,768(32K)
Weight Decay 0.1
Gradient Clipping 1.0
attention dropout 0.0
hidden dropout 0.0
gradient dtype FP32
AdamW beta1 0.9
AdamW beta2 0.95
AdamW epsilon 1.0E-8
20B
Hyper parameter name value
LR(Learning Rate) 3.00E-5
minLR(minimum Learning Rate) 3.00E-6
120B
Hyper parameter name value
LR(Learning Rate) 2.00E-5
minLR(minimum Learning Rate) 2.00E-6

SFT

Training Library

GPT-OSS-SwallowのReasoning SFTの学習ライブラリには、NVIDIA Automodel を利用しました。
Automodelは、NVIDIA NeMo Frameworksの1つであり、SFTだけでなくPre-Trainingも可能な設計になっています。前述したように学習開始時にはMegatron-LMでGPT-OSSの学習を行うには公式実装にパッチを当てる必要があったことから、より柔軟性があるライブラリであるAutomodelを選択し、Reasoning SFTを実施しました。

LR敏感性

GPT-OSS-20BのReasoning SFTでは、継続事前学習で利用したLRである3.0E-5を利用しました。すると下図のようにTraining Lossが徐々に上昇していく現象が確認され、モデルの学習が上手くできないことが判明しました。Automodelライブラリは、現在、活発に開発されているため軽微なバグが多数あります。最初はそのどれかを踏んだのかと考えましたが、Chat Templateの適用、Attention Mask、Loss Maskの範囲、eos tokenの扱い、pad tokenの扱いなど、SFTライブラリでよくある実装ミスは発見されませんでした。

そこで、LRを1.0E-5まで低下させたところ以下のように学習が安定することが判明し、実装側の問題ではなく高いLRによる学習の不安定化であった可能性が高いという結論になりました。

このように、初めて学習するモデルかつ、対応ライブラリが乏しい上に、初めて利用するライブラリを頼る際は、(1)ハイパーパラメータの設定が悪いために学習が上手くいかないのか、(2)それとも使い方が間違っているのか、(3)はたまたライブラリ側に致命的な問題があるのかの切り分けが難しく苦戦しがちです。
今回のAutomodelを利用したGPT-OSSの学習では、非常に単純なLRが高すぎることによる学習の不安定化でしたが、Qwen3-Swallowのセクションで取り上げたように実装側の問題によりNaNが発生することもあるのでなかなか難しいのが実情です。

学習環境

Swallow LLM Projectでは、以下の3つの計算資源を利用しながら今年度(2025年度)学習を行ってきました。GPUノードの不具合対応や計算機の調達など、多くの方々のご支援によりモデル構築が可能となっています。改めて感謝いたします。

  • TSUBAME 4.0: SwallowCode-v1, SwallowMath-v1の構築および予備実験などで利用しました。
  • ABCI 3.0: Qwen3-Swallowの本実験および予備実験、GPT-OSS-Swallowの本実験および予備実験で利用しました。
  • GMO GPUクラウド: 本リリースには含まれないモデルの構築で利用中です。

おわりに

本ブログでは、Qwen3-Swallowおよび、GPT-OSS-Swallowの概要と、その構築方法について説明を行いました。さらなる詳細につきましては、2026年3月に公開予定のTechnical Reportをご覧ください。

また、Swallow LLM Projectは来年度以降、従来のLLM開発を超えて新たな挑戦的な課題にもチャレンジしていきます。今後ともよろしくお願いいたします。今後も、日本および研究コミュニティにとって有益なモデル開発、ならびに産業利用可能なモデルの開発と研究を推進していきます。

tokyotech-llm

Discussion