1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

文系東大生がGPT型モデルをフルスクラッチで開発する話 Part4【学習・チューニング編】【株式会社ハイレゾ協力】

1
Last updated at Posted at 2026-07-08

【この記事の目的】
この記事では、Part3で実装したGPT型モデルを、実際にNVIDIA A100 80GB上で学習させる過程をまとめる。
モデルを実装するだけではなく、GPUメモリ、学習速度、バッチサイズ、学習率、checkpoint管理、validation設計など、実際に学習を回すうえで必要になった調整を紹介する。

【機材協力について】
本記事(および本連載プロジェクト)は、株式会社ハイレゾ様よりGPUクラウドサービス「GPUSOROBAN」の計算資源(NVIDIA A100 80GB)をご提供いただき、開発・検証を行っています。

0. はじめに

こんにちは!東京大学文科3類2年で、東大AI研究会 代表の青木です。

私たち東大AI研究会は東大で活動するサークルで、1年かけて0からGPT型モデルを開発するために、毎週水曜日に勉強会を開催しています。勉強会では初心者でも理解しやすいスライドと、充実したカリキュラムを用いて開発を進めています。

 株式会社ハイレゾ様は自社でGPUデータセンターを運営しGPUSOROBAN というGPUのクラウドサービスを提供する会社です。高性能GPUは非常に高価で、私たちのような学生サークルが簡単に手を出せるような代物ではありません。GPUSOROBANではクラウド上で必要な期間・量だけGPUを借りることができるため、初期投資を抑えてGPUを活用し開発を行うことができます。

 現在株式会社ハイレゾ様の協力のもと、25億パラメーターのGPT型モデルの実装と訓練を行っています。その名もSGT(Scratch Generative Transformer)プロジェクト!前回に引き続き、SGTプロジェクトの様子をお伝えします。

 前回モデルの実装を行いましたが、実際に学習を回すには、VRAM、学習速度、バッチサイズ、学習率、checkpoint、validation lossなど、多くの現実的な調整が必要になります。
この記事は、Part4【学習・チューニング編】として、そんな学習・チューニングの過程をまとめます。

(Part3【モデル実装編】はこちらから:https://qiita.com/uaokit0905/private/8e849efa7e6142dffaf3)

今回の学習サマリは以下のようになっています。

学習サマリ

基本情報

  • 実験名SGTプロジェクト
  • モデル規模: 約2.5B parameters
  • GPU: A100 80GB など
  • 初期状態: ランダム初期化
  • 最新checkpoint: checkpoint_25500steps

学習設定

  • batch size: 4
  • gradient accumulation steps: 128
  • 実質batch size: 512 sequences/update
  • sequence length: 2048
  • 1 stepあたりの処理token数: 約1.05M tokens/update
  • 学習予定token数: 約50B tokens
  • learning rate: max 3e-4 / min 3e-5
  • warmup steps: 1000

実行結果

  • validation loss:
    スクリーンショット 2026-06-28 211833.png

-checkpoint_001000時点で約2.80。その後、checkpoint_25000付近までおおむね低下し、約1.5前後まで改善。20,000stepsで急激な減少が見られるが、原因は不明。

  • step 0のvalidation lossは未測定のため、グラフには含めていない。

  • 学習速度: 11400 tokens/sec

  • VRAM使用量: 70.9 GB / 81.9 GB

  • GPU-Util 99%

  • 学習時間: 約30日

簡易判断

  • validation loss: 改善
  • 所感: train lossを保存しておくのを完全に忘れていました。この致命的なミスを繰り返さないように、ログ情報の記録は大切にしましょう。

推論試験

スクリーンショット 2026-07-02 163509.png
スクリーンショット 2026-07-02 163517.png
一般常識についても徐々に知識を身に着けています。

1. 学習環境

GPU:NVIDIA A100 80GB ×1
Compute Platform:GPUSOROBAN
OS:Ubuntu 22.04
CUDA / Driver:12.8 / 570.86
Python:3.11
PyTorch:2.7.0
利用期間:2026年6月1日から7月29日

2. 学習設定

2.1 主なハイパーパラメーター

表にする項目:

項目 設定値 意味
batch_size 4 1回のforward/backwardで処理するサンプル数
gradient_accumulation_steps 128 何回分の勾配を貯めてから更新するか
sequence length 2048 1サンプルあたりのトークン数
1 stepあたりのtokens 4 × 128 × 2048 = 1,048,576 1回の重み更新で処理するtoken数
max learning rate 3e-4 最大学習率
min learning rate 3e-5 最小学習率
warmup steps 1000 学習率を徐々に上げる期間
total steps 54000 学習予定step数
checkpoint保存間隔 500 steps モデルを保存する頻度
validation間隔 100 steps lossを評価する頻度

2.2 学習効率の向上の工夫:勾配蓄積

 複数の学習データをまとめてモデルに入力し学習を行うbatch学習という手法があります。一度にまとめてモデルへ入力するデータの数をbatch sizeといい、batch sizeを大きくすることで、安定して学習を行うことができます。しかし、その分GPUメモリ(VRAM)を多く使用するため、25億パラメータのモデルをそのまま大きなbatch sizeで学習させるとメモリが足りません。
 そこで、何回かに分けて計算した勾配をためておき、あとでまとめて重みを更新する勾配蓄積という手法を使用します。メモリ使用量を抑えながら、疑似的にbatch sizeを大きくすることができます。
 今回はbatch size=4で計算した勾配を128回分ためてから勾配を更新するので、実質的なbatch sizeは 4 × 128 で 512になります。

3. 学習開始!

3.1 学習ループの流れ

学習がどのように進んでいくかは前回記事【Part.3 モデル実装編】をご覧ください。

3.2 学習ログの例

スクリーンショット 2026-06-23 160356.png

執筆時の学習ログの様子です。
step 21300 | lr 2.135042e-04 | train loss 1.6942 | val loss 1.6763 | tok/s 11340 | tokens 22,334,668,800 | time 866340.79s

  • steps : 学習が何step目まで進んだのかを表示します。
  • lr : 現在の学習率が表示されます。学習の進行状況によって学習率を変動させる学習率スケジューリングを用いています。
  • train loss : 学習時にどれくらいの誤差が出ているのかを表示します。
  • val loss : 学習に使っていないテキストを用いてモデルの精度を調査します。100stepごとに計算され、表示されます。
  • tok/s : tokens per second を意味し、一秒間に何トークンを処理したかを示しています。大体 11300tok / s くらいで安定しています。
  • tokens : 現在学習済みのtoken数を示しています。
  • time : 学習の進行時間を示しています。

train lossについて

train lossは学習データに対して、モデルの予測がどれくらい外れているかを表す値です。GPT型モデルは過去のトークンから未来のトークンを予測していくわけですが、この予測が上手くいけばいくほど、この値は下がります。ただし、あくまで学習データにおける予測と正解の誤差であることが重要です。

val lossについて

val loss とはvalidation lossの略で、学習に使っていないデータに対して、モデルの予測がどれくらい外れているかを表す値です。計測方法自体はtrain lossと変わらないのですが、重要なのは、学習に使っていないトークンを用いて評価するということです。

val lossには過学習を防ぐという重要な役割があります。train lossだけ下がってval lossが下がっていないならそのモデルは過学習を起こしており、train lossとval lossがともに下がっているなら、そのモデルは順調に汎化性能を高めている、と分かります。

4. GPU使用率・VRAM使用量

4.1 VRAMは何に使われるのか

 GPUのメモリのことをVRAMと言います。VRAMにはモデルの重み、勾配の計算結果、optimizerの状態、forward/backward中の中間計算結果が保存されます。batch sizeやsequence lengthが大きいほどVRAMの使用量が増えます。
 

4.2 実際のVRAM使用量

VRAMの使用量は以下のようになっています。
スクリーンショット 2026-06-23 151935.png

VRAM使用量:70.9 GB / 81.9 GB
勾配蓄積の実質batch sizeを調整し、メモリをなるべく使用しています。ここで欲張ると学習中にメモリ不足になってしまうので、慎重に。

4.3 GPU使用率

GPU使用率:GPU-Util 99% Power 294W / 300W
この値が高いほど、GPUの計算性能が発揮されていることになります。
訓練開始前にこの値はあまり意識していませんでしたが、batch sizeの調整が上手くいっていたようです。

5. 学習速度と学習時間

5.1 11300tokens/secで60日間学習を回す。

tokens/secは、1秒あたりに処理できるtoken数を示しています。この値から、何日間でどれくらいのトークン量を学習できるかが分かります。

その間1秒当たり約11300token処理できるので、GPUの使用期間である60日間(5,184,000秒)で 11300 * 5,184,000 = 58,579,200,000 tokens 約600億トークンを処理できます。このSGTプロジェクトでは500億トークンの学習を目標にしているため、計算速度は問題ありません。

5.2 1 stepあたりの処理token数

今回の設定では、batch sizeを4、勾配蓄積の回数を128、sequence lengthを2048にしています。batch sizeが4なので、1回の計算では2048トークンのデータを4個まとめて処理します。つまり、1回の計算で処理するトークン数は 4 × 2048 = 8192 tokens です。
さらに、勾配蓄積によってこの計算を128回繰り返してから、1回モデルの重みを更新します。そのため、1 stepあたりに処理するトークン数は、4 × 128 × 2048 = 1,048,576 tokens になります。
今回は学習総ステップを54,000stepsに設定しているため、56,623,104,000tokens、つまり約566億トークンを学習します。11300 tok/s だと大体58日間かかります。
この辺はあまり細かい調整をしていません。。。

6. おわりに

GPUの使用期間は60日と期限が決まっています。この中でGPUを最大限利用するために、VRAMの使用量を安全な範囲で増やし、GPUの計算効率を高めました。
VRAMの使用量については勾配蓄積を使用しましたが、4から1024までの様々な実質batch sizeを試して512に決めました。

勾配蓄積のことは先輩に教わりました。batch sizeの目安はだいたい256とか512とのことなので、その値ありきで実質batch sizeをいじりながら、tok / sの値を計測しました。

実質batch size32

実質バッチサイズ32.jpg

実質batch size64

実質バッチサイズ64.jpg

実質batch size128

実質バッチサイズ128.jpg

実質batch size256

実質バッチサイズ256.jpg

実質batch size512

実質バッチサイズ512.jpg

実質batch size1024

実質バッチサイズ1024.jpg

ご覧の通り、ログの一番右のtimeが2倍2倍に増えています。tokensも一緒に2倍2倍になっているので、tok/sは変わりませんでした。

batch sizeは大きい方が学習が安定しますし、モデルサイズが大きいほどbatch sizeも大きくする傾向にあります。しかし、実質batch size1024では1stepに時間がかかりすぎて、重みの更新回数が減ってしまいます。処理するtoken量が一緒でも、更新回数が下がると学習速度が下がり、lossが下がり切らないかもしれません。

tok / sが変わらないのならば、もともとの目標値にしようということで、実質batch sizeを512にしました。
結果的にVRAMを十分に使用できたので良かったです。

次回は学習状況の共有と、モデル性能の検証を行います!お楽しみに

関連リンク

株式会社ハイレゾ 公式サイト:https://highreso.jp/
クラウドサービス GPUSOROBAN:https://soroban.highreso.jp/

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?