論文解説: Puro-2B — コンシューマGPUで2Bモデルを$6.9Kからゼロ事前学習する
ゲーミング向けGPUのRTX 5090で1.4兆トークンの事前学習を回し、Qwen2-1.5B級の性能に約$4.4Kで届いたという報告を、コスト構造・FP8・実効学習率・カリキュラム平均の順に1から解説する。
Puro-2B: Poor Lab's Qwen2-1.5B Trained on RTX 5090 within $5090
一次資料 — この記事の根拠
論文の発表 2026-08-27→この解説の公開 2026-09-03同月
Puro-2B: Poor Lab's Qwen2-1.5B Trained on RTX 5090 within $5090Kairong Luo, Jiarui Cui, Yaorui Yin ほか · 2026-08-27 · v1arXiv:2608.27370論文ページ·PDF原文の要旨(Abstract)を読む
Language model pretraining has become almost synonymous with prohibitive cost, placing it out of reach for much of the academic and open-source communities. Although strong open-source efforts already exist, including open-weight models and open-source training recipes, a cost-efficient, hardware-accessible, and open-source pretraining recipe has long been missing. Even at a small scale, training Llama-3.2-3B costs over \$1.5M, and reproducing SmolLM3-3B needs over \$700K. In this report, we present an open pretraining recipe designed to lower this barrier. Using this recipe, we train a collection of Puro-2B models from scratch on up to 1.4 trillion tokens with FP8 precision on consumer-grade RTX 5090 GPUs. The models in the collection differ in token budgets and selected recipe variants. Our best model is trained at a compute cost of less than \$6.9K and approaches Qwen2.5-1.5B performance under our evaluation protocol. This cost efficiency is enabled by a combination of approaches, including hardware selection, low-precision training, hyperball optimization, curriculum model averaging, and the data recipe. Beyond the recipe itself, we provide two additional results. First, across the Puro-2B collection, we derive a Puro Cost Scaling Law that relates training cost to average model performance; the fitted law suggests that about \$4.4K, less than \$5,090, is sufficient to reach the performance of Qwen2-1.5B. Second, as an end-to-end case study, we examine how pretraining data curricula shape downstream performance after post-training. Such controlled studies are enabled by having access to the full pretraining pipeline rather than model weights alone. We release the full training recipe for Puro-2B, including data, code, and model weights under Apache 2.0 at https://huggingface.co/collections/thu-pacman/puro-2b.
「事前学習は資金のある者だけの遊び」への反証
原題は **"Puro-2B: Poor Lab's Qwen2-1.5B Trained on RTX 5090 within 5090" はGPU名 RTX 5090 と金額をかけた言葉遊びです。
要旨はこうです。事前学習は費用が法外で、学術界やオープンソース界隈の手の届かないところにある。オープンな重みや学習レシピを公開する試みはあるが、安価で、入手しやすいハードで動き、しかも公開されているレシピは長らく欠けていた。そこで著者らは、コンシューマ向けGPUのRTX 5090上でFP8精度を使い、最大1.4兆トークンをゼロから学習して Puro-2B というモデル群を作った。最良のモデルは計算コスト $6.9K 未満で、著者らの評価手順のもとで Qwen2.5-1.5B に迫る。さらに学習コストと平均性能を結ぶ「Puro コストスケーリング則」を当てはめると、約 5,090 未満)で Qwen2-1.5B の性能に届くと示唆される。データ・コード・重みは Apache 2.0 で公開されています。
いくらかかるのかを数字で押さえる
論文がレンタル換算で挙げる再現コストは、Llama-3.2-3B が $1.5M 超、オープンレシピの OLMoE-1B-7B が $200K、SmolLM3-3B が 6.89K・実時間17.6日** (§2.1)。フェーズ2を480Bで打ち切った軽い方は $4.37K です。桁が2つ違いますが、効いているのは魔法ではなく、費用を構成する要素を別々に削ったことです。
桁の感覚は、後で出てくる実測スループット(GPUあたり中央値238 TFLOP/s)で割り戻すとつかめます。2B級を約1.4兆トークン回せば理論計算量はおよそ FLOP、これを238 TFLOP/sで割るとおよそ2万GPU時間で、実測の22,514時間と同じ桁に収まります。見積もりが実測と桁でずれたときは、たいてい実効スループットか学習トークン数のどちらかを取り違えている —— この検算は自分の計画にもそのまま使えます。
コストは「単価 × 時間」に分解できる
は理論計算量で、論文も使う慣例式 ( はパラメータ数、 は学習トークン数)で見積もります。要するに、費用を下げる入口は4つある —— 単価を下げる、GPUを遊ばせない、同じ品質に届くのに必要なトークン数 を減らす、1トークンあたりの実行時間を縮める。論文の整理では、データ選択が必要トークン量を減らし、最適化とカリキュラムがトークンあたりの学びを増やし、FP8が利用率を上げ、ハード選択が計算単価を下げます (§1)。
4つ目までは直感的ですが、「同じ品質に届くトークン数」は学習率の設計に強く依存します。学習率は谷を下る一歩の大きさで、大きすぎれば飛び越えて発散し、小さすぎれば底に着かない。この一歩の設計が、そのまま必要計算量=お金になります。
打ち手1: ゲーミングGPUを選ぶ
論文はデータセンター向けではなくRTX 5090クラスタを選びました (§3.1.1)。ピーク性能は BF16 209.5 / FP8 419 TFLOPS で H200(989.5 / 1979)に遠く及ばず、メモリも32GB、NVLinkもない。それでも実効価格が桁違いに安い($0.31/h 対 $4.00/h)ため、価格あたりの計算量では H200 の約2.7倍になります。ただしこの $0.31/h は公開レンタル価格ではなく、自前機材と電気代を5年償却した推定値だと明記されています。
代償は通信です。NVIDIAはドライバでコンシューマGPUのPCIe P2Pを塞いでおり、GPU間通信がホストメモリ経由になる。著者らは公開されている改造ドライバと設定変更(IOMMUとPCIe ACSの無効化、NUMA Per Socketの調整)でこれを開け、双方向帯域を32から111 GB/sへ改善しました (§3.1.2)。学習側では層ごとに通信が走るテンソル並列を捨て、データ並列とパイプライン並列だけを使い、計算の重いLMヘッドを含む段には層を少なく割り当てる。結果、GPUあたり中央値238 TFLOP/s、混合精度換算のMFU約73%に達しています (§3.1.3)。
この構成がどこで効かなくなるかも同時に読めます。テンソル並列を捨てられるのは、層の重みと最適化器状態が32GBに収まるうちだけ。そこを超えると通信の細さがそのまま学習不能に変わるので、同じ手が使えるのは「パイプライン並列で足りる」規模まで、というのが実務的な線引きになります。逆に言えば、この論文の結論を10B級にそのまま持ち込むのは筋が悪い。
打ち手2: ブロック単位FP8を最初から使う
BF16の準備運転を挟まず初期化直後からFP8を使いますが、FP8になるのはTransformer線形層のGEMMだけで、マスター重みや最適化器状態はBF16/FP32のまま。FP8は保存形式ではなくその場の計算形式という整理です (§3.2)。数値の潰れを防ぐため、テンソル全体で1スケールを共有せず、活性値と勾配は縮約方向の128要素ごと、重みは128×128ブロックごとにスケールを持ちます。
コメント
コメントにはログインが必要です