HN 日本語サマリー

← 一覧へ戻る
AI・機械学習

16GB GPUでファインチューニングしたQwenを「e」の文字なしで応答させる

Fine-tuned Qwen on my 16gb GPU to respond without the letter e (kevin-wu.ca)

7 pointsby k33wu0 コメント

要約

著者は、言語モデルが特定の文字(この場合は「e」)を含まない文章(リポグラム)を生成できるようにファインチューニングする実験を行いました。トークンベースの処理により、モデルは文字の有無を直接認識できないため、このタスクは困難でしたが、マスク処理と教師ありファインチューニング(SFT)、そして強化学習(RL)を組み合わせることで、実用的な結果を得ることに成功しました。

全文翻訳

Qwen、e抜きで

目次

少し前に、言語モデルに花の絵を描かせるRLプロジェクトを見かけました。私も「芸術的」な目標のためにモデルを調整したいと思いました。特定の文字を省略したテキスト、つまりリポグラムを出力するように学習させることができるか試したかったのです。作家は有名な作品(『Gadsby』、『La Disparition』)をこの方法で書きましたが、LLMがどこまでできるかを見たかったのです。

実際、このタスクは非常に困難でした。LLMが「ストロベリー」という単語の「r」の数を数えるのに(かつて)苦労したのと同じ理由です。モデルは単語ではなくトークンでテキストを読み取るため、ある単語に「e」が含まれているかどうかを直接見ることはできません。

それでも、私は自分の16GB GPUでQwen3-1.7Bをファインチューニングし、日常的なプロンプトに「e」を使わずに応答できるようにしました。

以下は、変更前と変更後の比較です。

変更前

A tree stands tall in the breeze,
Its leaves sway gently with ease.
The wind plays softly through the branches,
And whispers secrets to the grass.

It bends, it sways, it moves with grace,
A dance of nature in the space.
The sun casts shadows on its crown,
And the earth listens to its sound.

変更後(eなし!)

A gust draws down a branch,
And a branch bows low to its wind.
Its shadow walks by, too,
As it falls so softly on its ground.

A branch taps against a wall,
And taps again, and taps again.
A sound so small, so slow,
That it brings us all into its calm.

この記事では、私が何をしようとしていたのか、そしてどのようにしてそれを達成したのかを説明します。どのような応答が良い応答とみなされるか、なぜ良い応答を得るのが難しいのか、そしてSFTとRLがどのようにしてモデルにそれらをより頻繁に書かせるようにしたのかについてです。実装の詳細については、下部の付録を参照してください。

タスクの定義

タスクは、上記のような日常的なプロンプトに「e」を使わずに応答することです。プロンプトは2つの既存のデータセット(DollyとNo Robots、付録)から取得し、「モナ・リザを描いたのは誰?」のように「e」なしでは答えられないプロンプトは除外しました。応答は短く、300トークン(約200語)に制限されます。すべてのプロンプトには、モデルに評価とトレーニングの両方で「e」または「E」を使わないように指示するシステムメッセージも含まれます。

応答が使用可能とみなされるには、3つのチェックをパスする必要があります。

  • 「e」または「E」がないこと(アクセント付きのバージョンも含む)。これをチェックするコードが数行あります。
  • プロンプトに答えていること。
  • 通常の英語として読めること。スペルが正しく、意味が通じるアイデアであること。

例えば、この応答はすべてをパスします。

プロンプト: How much wood could a woodchuck chuck if a woodchuck could chuck wood?

応答: As many as it could, assuming it can and wants to.

最後の2つのチェックについては、GPT-6 Lunaが審査員として各応答を1から5で採点します。応答は両方とも最低4点が必要です。

この記事のすべての結果は使用可能率です。これは、200(検証スプリットから50プロンプト、各4つの応答)のうち使用可能な応答の割合です。後で、これらの審査員のスコアがRLトレーニングの報酬にもなります。

なぜこれが難しいのか?

明らかな最初の試みは、モデルに「e」を使わないように指示することです。しかし、これはうまくいきませんでした。Qwen3-1.7Bは、評価の200の応答すべてで「e」を使用しました。トークンではなく文字を見ているため、どの単語を避けるべきかを簡単に判断できません。

RLで「e」を学習で排除しようとするのも、それだけではうまくいきません。これが私の最初の実際の試みでした。教師あり学習はコピーする例となる応答を必要としますが、RLはモデルの応答を採点する方法を必要とするだけで、そして「e」をチェックするのは数行のコードで済みます。数時間で「e」を回避するLoRAアダプターを作成できましたが、有用なことを何も言わずに回避する方法をたくさん見つけました。例えば、ランダムな文字のストリームを生成するなどです(プロセスは付録にあります)。

マスクを使えば、トレーニングなしで「e」をすべて削除できます。モデルが各トークンを選択する前に、'e'を含むすべてのトークンのスコアを負の無限大に設定するため、決して選択されることはありません。(マスクは「E」や非ASCII文字もブロックするため、「é」のような見た目が似ている文字も入り込むことができません。)

しかし、マスクはモデルが特定のトークンを書くのを阻止するだけです。モデルにそもそも「e」を避ける単語を選択するように教えるわけではないため、しばしば繰り返しやスペルミスにつながります。木材チャックのプロンプトに対する応答は次のようになります。

応答: This is a classic riddiculous and humorous riddiculous riddiculous riddiculous riddiculous riddiculous riddiculous riddiculous riddiculous riddiculous

応答は明らかにナンセンスですが、単語に「e」が含まれていないとしてもです。しかし、これで残りの2つの部分、つまり意味のあるものを書き、プロンプトに答えることに集中できます。

マスクが「e」を処理するため、ほとんどの実験で使用します。明確にするために、ここでは2つの名前を使用します。

  • マスクなし: Qwen3-1.7B、'e'を使わないように指示、マスクなし
  • マスクあり: 同上、ただしマスクあり(トレーニングなし)

トレーニング前:

設定使用可能
マスクなし(指示のみ)0%
マスクあり(指示とマスク)26%

残念ながら、26%はあまり良くありません。

例で学習する(SFT)

教師ありファインチューニング(SFT)は、モデルに例となるテキストをコピーするように学習させます。そのため、主な疑問は、どのような例を示すかということです。

既存の「e」なしの小説で学習させても効果はありませんでした。『Gadsby』は「e」なしで書かれた50,000語(約69,000トークン)ですが、モデルが自然な「e」なしの言い回しをそこから拾うことを期待していました。損失は下がりましたが、評価セットではモデルは約26%で、マスクありモデルと同程度のスコアでした。

以下は、マスクありモデルの応答と並べて、各応答の下に審査員のコヒーレンスと応答スコアを示します。

マスクあり

You should study by practicing past topics and using flashcards. Also, try to think about what you know and ask for clarification if you don’t fully grasp a topic. Consistly practicing and taking mock quizzs will also aid in your studying.

coherence 3, responds 5

『Gadsby』で学習したモデル

Study for a t / Study for a t / Study for a t / Study for a t…

coherence 1, responds 1

これを説明するには2つの可能性があります。1) 小説はモデルに散文を書くことを教えるのであって、プロンプトに答えることを教えるのではありません。または 2) 69,000トークンでは差をつけるには少なすぎるのかもしれません。

プロンプトに対する「e」なしの応答で学習させると効果がありました。オンラインにはこのようなデータセットがなかったため、自分で作成しました。トレーニングスプリットから180の適切なプロンプトを取得し、フロンティアモデルに「e」なしの応答を書かせました。フロンティアモデルでさえ、一度で「e」なしの応答を書けないこともありましたが、どの単語を置き換えるべきかを指示されると、通常は間違いを素早く修正しました(これはQwen3-1.7Bではうまくいきませんでした)。

データ量の重要性を確認するために、15から180の例で別々のアダプターを学習させました。各アダプターは、検証損失が上昇し始めるまで(過学習の兆候)学習させ、その後評価を実行しました。

トレーニング例015304590135180
マスクありでの使用可能率26%10%20.5%22.5%31.5%34%35%

最良のアダプター(180例)は35%で、マスクありモデルより9ポイント高くなりました。以降、これをSFTアダプターと呼び、RLの2番目の出発点となります。

増加分は単にテキスト量が増えたからではありません。300トークンの上限は、モデルが応答を生成するとき(評価時およびRL中)にのみ適用されます。SFTは最大3,072トークンの完全なチャットで学習したため、180例は約117,000トークンになりますが、『Gadsby』は約69,000トークンでした。しかし、サイズが近い90例の実行でも、『Gadsby』(31.5%対約26%)を上回りました。

他に3つの点が際立っています。

  • 増加は鈍化している。90から180例への倍増で3.5ポイントしか追加されなかったため、この種の例をさらに多く書いても、それほど助けにはならないでしょう。
  • 小さなトレーニングセットは有害である。15例では、応答が長くなり、悪化しました。
  • 応答はよりクリーンになったが、トピックから逸れた。キーワードに「e」が必要な場合、アダプターは別の単語に置き換えて、その単語について応答します(例:「cliché」を「clik」に)。

そのため、SFTアダプターを維持し、RLに進みました。

審査員とのトレーニング(RL)

私の最初のRLの試みは、スコア付けされたのが「e」だけだったためうまくいきませんでした。審査員がこれを修正します。応答が意味をなし、プロンプトに答えているかをスコア付けし、マスクは引き続き「e」を処理します。ループはシンプルです。

いくつかのプロンプトを選択 → 各プロンプトの応答をサンプリング → 審査員で応答をスコア付け → スコアを報酬に変換して、より良い応答を促進 → 大量のプロンプトで繰り返す。

詳細には、各トレーニングステップは次のとおりです。

  1. プロンプトプールからいくつかのプロンプトを選択します。
  2. マスクをオンにし、評価で使用するのと同じ「e」なしシステムメッセージを使用して、各プロンプトの応答グループを生成します。
  3. 審査員にすべての応答を並列でスコア付けさせます。各応答にはコヒーレンススコアと応答スコアがあり、どちらも1から5の範囲です。
  4. スコアを報酬に変換します: reward = (coherence − 1 + responds − 1) / 8。これにより、0(両方1)から1(両方5)の数値が得られます。
  5. 各応答をそのグループ内の他の応答と比較します。各グループ内で、グループの平均報酬を引き、その分散で割ります。応答は、同じプロンプトに対する他の応答を上回った場合にのみ促進されます。
  6. LoRAアダプターを1回更新します。

このセットアップでのスコアリング方法を示すために、例のグループでのステップ5を示します。

1つのプロンプトに対する8つの応答
報酬 1 0.5 0 +1.4 +0.9 +0.9 +0.5 −0.5 −0.9 −0.9 −1.4
審査員のスコア(コヒーレンス、応答) 5, 5 5, 4 4, 5 4, 4 3, 3 2, 3 3, 2 2, 2
平均 0.625
↑促進された
↓抑制された

各バーの上にある数字は、その応答のグループ調整済み報酬です。

私が使用した具体的な設定は次のとおりです。

設定値
ステップあたりのプロンプト数4
プロンプトあたりの応答数(グループサイズ)8
サンプリング温度0.7
最大応答長300 トークン
思考オフ
LoRAランク16
学習率2e-5
KLペナルティ重み0.02
トレーニングステップ数300

これらの数値の理由

  • ステップあたりのプロンプト数 4。4プロンプト × 8応答はステップあたり32応答となり、GPUメモリは最大10~13GBに達し、16GBカードに設定した15GBの制限内に収まりました。
  • プロンプトあたりの応答数 8。GRPOは、応答が異なるスコアを取得した場合にのみグループから学習し、少なくとも1つが使用可能な場合に最も学習します。以下のチェックによると、8つのグループの約3分の2には使用可能な応答が含まれるはずです。
  • 温度 0.7。最初に1.0でサンプリングする予定でしたが、1.0ではSFTアダプターの応答が崩壊し、「Ranak」や「palacco」のような造語が発生しました。マスクありモデルは両方でほぼ同じだったので、0.7を採用しました。
  • 300トークン上限。評価と同じ上限なので、応答は測定されるのと同じ条件でトレーニングされます。300トークンは約200語で、これらの日常的なプロンプトには十分です。
  • 学習率 2e-5。LoRAアダプターのトレーニングとしては比較的低いですが、うまくいきました。最初はもっと高い値で始めましたが、モデルが過学習し続けたため、学習率を下げました。
  • KLペナルティ 0.02。これはGRPO実装に設定したデフォルト値でした。しかし、目立った肯定的な影響はなく、出発点の分布は私たちにとって重要ではないため、おそらく不要です。
  • 300ステップ。300ステップ × 4プロンプトは1,200プロンプトで、1,235プロンプトのプールを約1回通過します。また、25ステップごとにチェックポイントを保存して評価を実行し、増加がどこで鈍化したかを確認しました。

RLは、SFTの優位性が持続するかどうかを確認するために、マスクありモデルとSFTアダプターの2つの出発点から実行しました。

GRPOは、少なくとも1つの応答が使用可能で、応答が異なるスコアを取得するグループを必要とします。両方の出発点はこれをクリアします。50の新しいプロンプトで各16回の試行を行ったところ、マスクありモデルは78%のプロンプトで少なくとも1つの使用可能な応答を得ましたが、SFTアダプターは64%でした。ほとんどすべてのプロンプトで応答は異なるスコアを取得しました。

その後、各出発点から300ステップ実行しました。

結果

RLは両方の出発点から使用可能率を向上させました。

出発点RL前300ステップ後増加分(中央90%範囲)*
マスクあり26%43%+17 (+8~+26)
SFTアダプター35%60.5%+25.5 (+17.5~+33.5)
  • 異なるプロンプトセットで増加がどのように変化するかを見るために、評価プロンプト50個を1,000回ランダムに再描画しました(同じプロンプトが複数回選択される可能性があります)。各回、両方のスコア(前と後)に同じ描画プロンプトを使用して増加を計算しました。表示される範囲は、これらの1,000回の増加の下位5%と上位5%を除いたもので、中央の90%をカバーします。これはペアワイズブートストラップです。

RL中の使用可能率

  • SFTアダプター
  • マスクあり

数値表示

RLステップマスクありSFTアダプター
026% (19~33%)35% (27~43.5%)
2528% (20.5~36%)43% (34~52.5%)
5034% (25.5~43%)53% (44.5~62%)
7539.5% (31~48.5%)55.5% (47~64.5%)
10044% (35.5~53%)51% (42~60%)
12544% (34~53%)58.5% (50~68%)
15035% (26.5~44%)60% (52~68%)
17538% (29~48%)56.5% (47.5~65.5%)
20039% (30~47%)60.5% (52~70%)
22536.5% (28~45%)61.5% (53~70%)
25040% (32~48%)61.5% (53.5~69.5%)
27540% (31.5~48%)59% (50~68%)
30043% (34.5~51.5%)60.5% (51~69.5%)

SFTアダプターはRLの出発点として優れています。9ポイント高く始まり、より多く増加したため、SFTデータは持続的な利益をもたらしました。両方の実行とも、約ステップ125までにほとんどの増加分を獲得し、それ以降はほぼ横ばいでした。

いくつかのプロンプトでの様子は次のとおりです。ほとんどの応答は改善しましたが、一部は疑わしいほど短くなりました。

RL前(SFTアダプター)

For a long long long long long long long long long…

300トークン上限まで繰り返す · coherence 1, responds 1

300 RLステップ後

For a man with a low IQ, his story follows a happy path and a grand story of war and a family.

coherence 3, responds 4

一部の応答が短くなったことに注意してください(上記のpick the station、baseball、clichéプロンプトを参照してください)。「SNCF」と「football」はそれぞれ1単語です。「Football」は質問に半分しか答えておらず、clichéの応答はまったく答えていませんが、どちらもコヒーレンスで5点を得ています。

異なる設定、応答あたりのトークン数、および使用可能率を比較します。

中央値トークン数平均トークン数使用可能率
マスクなし、RL前529226%
マスクなし、300ステップ後184243%
SFTアダプター、RL前537035%
SFTアダプター、300ステップ後244060.5%

改善は単に短い応答によるものですか?

マスクありモデルの場合、ほとんどそうです。 すべての増加分はコヒーレンススコアによるもので、短い応答が獲得しやすいスコアであり、質問に答える能力の向上によるものではありませんでした。質問の一部をスキップしたクリーンな応答は、200件中24件から66件に増加しました。最も可能性の高い原因は報酬メカニズムです。2つのスコアを合計するため、コヒーレンス5点と応答3点では、4点と4点と同じ報酬が得られますが、4点と4点だけが使用可能とみなされます。これにより、短くてクリーンな半分の応答がモデルにとって安全な選択肢となります。

SFTアダプターの場合、そうではありません。 両方のスコアが上昇し、使用可能率はすべての応答長で上昇しました。したがって、そこでの増加は単に短くなったことによるものではありません。

では、なぜ応答が短くなるのでしょうか?SFTアダプターから、他のすべてを同じにして150ステップの実行で、2つの修正をテストしました。

  • 2つのスコアのうち低い方を報酬として使用する。これにより、クリーンな半分の応答(5と3)は、使用可能な応答(4と4)よりも少ない報酬になります。
  • 損失で短い応答を優先するのをやめる。GRPOは通常、各応答の損失をその自身の長さで割るため、短い応答は単語あたりにより大きな推進力を得ます。代わりに300トークン上限で割ることで、それを削除します。

どちらの修正も使用可能率を上げず、短縮を止めることもありませんでした。ステップ150では、中央値の応答は30および38トークンでしたが、元の実行では33トークン、RL前では53トークンでした。したがって、短縮は報酬または損失の設定方法から主に生じるものではありません。マスクの下では、追加の単語ごとに奇妙な単語に押し込まれる別の機会があるため、短い応答は自然に良いスコアになります。

では、どこに落ち着くのでしょうか?開始時、マスクありモデルの応答の約4分の1が使用可能でした。180の「e」なしの例でのSFTと300ステップのRLの後では、約10分の6です。そしてSFTアダプターの場合、その増加は、単に少なく書いているだけかどうかを確認したときにも持続しました。まだ時々手抜きをしますが(「football」を参照)、開始時の「ridiculous」な応答よりも、使用可能な木材チャックの応答にずっと近くなっています。

以下は、各段階での評価セットからのすべての応答です。ドットにカーソルを合わせるかタップして読みます。

マスクなし

0 / 200 使用可能

マスクあり

52 / 200 使用可能

SFTアダプター、300 RLステップ後

121 / 200 使用可能

  • 使用可能
  • 審査員がコヒーレンスまたは応答で4未満を付けたもの
  • 「e」を含むもの

各ドットは1つの応答です。評価プロンプト50個、各4つの応答。応答が使用可能であるためには、「e」がなく、審査員がコヒーレンスと応答の両方で最低4を付けた必要があります。

まとめと次のステップ

プロジェクトに関するいくつかのまとめ:

  • 「e」と文章作成は別々の問題である。マスクはトレーニングなしで「e」をすべて削除します。難しかった部分、そしてSFTとRLが取り組んだすべては、残った単語でうまく書くことです。
  • タスクに合ったデータは、間違った種類のデータよりもはるかに価値がある。書かれた90の応答は、ほぼ同じサイズの「e」なし小説(約26%対約31.5%)よりも優れていました。

そしてプロセスに関するいくつかのまとめ:

  • 目標を早期に定義する。使用可能率を目標とするまで、プロジェクトはLLMファインチューニングの探求に過ぎず、目的がないように感じられました。
  • スプリントで作業する。中間では、学校と面接準備をプロジェクトと両立させており、日々の方向性について深く考えるのが困難でした。マイルストーンを設定し、それを達成するまで作業する方が、少しずつ進めるよりもずっとうまくいきました。
  • サンプルを読む。損失と報酬は単なる数値であり、出力が崩壊していても(付録の文字ストリームを参照)、それらは問題なく見えることがあります。トレーニングが有用な方向に向かっているかを確認するには、実行をログに記録し、応答を保存することが重要です。

特に、より慎重な実験と半分の応答を好まない報酬があれば、改善の余地はまだあります。しかし、学んだことと結果が着地した場所には満足しており、次に時間を費やしたいことがあります。

  • RLの基本についてさらに学ぶ
    • つまり、その背後にある数学的フレームワークを学習し、より一般的なアルゴリズムを実装して、それらの背後にあるアイデアを理解すること
    • いつかビデオゲームにRLを適用することも試したいです…
  • モデル/エージェントとのより現代的なポストトレーニング作業を見る
    • 次のLLMのRLプロジェクトでは、既存のパッケージ/APIを使用し、より大きな実験を実行するためにコンピューティングに料金を支払うことになるでしょう。

参考文献と読書

付録

プロジェクトタイムライン

プロジェクトのプロセスは、大まかに次のとおりでした(ブログは太字の部分をカバーしています)。

  • プロジェクトのスコープ設定、モデルの選択、予備的な読書
  • フォワードパスの記述、最適化の組み込み(メモリに関する情報はメモリセクションを参照)
  • モデルに特定のプロンプトで「e」を使わずに応答を生成させるための直接的な試み(ベースモデルのRL、マスクの試用)
  • 目標の定義(ファインチューニング後に何を見たいか?どのようなデータが必要か?)
  • TRLの「Trainer」クラスの独自実装での試行錯誤(githubリポジトリの「Engine」クラスを参照)
  • SFTの試み
  • コヒーレンスのためのRL
  • クリーンアップと執筆
GitHubリポジトリ

コード、データ、結果はすべてkevinyvv/qwen-3-1.7b-finetune-projにあります。興味深い可能性のある部分は次のとおりです。

Hugging Faceのアダプター

両方のアダプターはHugging Faceにあり、peftを使用してQwen3-1.7Bの上にロードできます。

これらは「e」なしの状態を維持するためにマスクが必要なため、モデルカードにはマスクをオンにして実行するコードが含まれています。

モデルの選択

Qwen3-1.7Bを選択したのは、16GBのVRAMでローカルでファインチューニングできたからです。そのアーキテクチャは、新しいモデルよりもシンプルだったため、フォワードパスを理解して実装するのが容易でした。

それ以外に実際に行った事前計画は、ローカルで作業できるモデルの選択方法を学ぶことでした。詳細はデフォルトで折りたたまれていますが、メモリ計算についてさらに知りたい場合は、自由に読んでください。

メモリ計算と最適化

トレーニングメモリは、モデルの重み、勾配、オプティマイザの状態、保存されたアクティベーション、およびロジットのような大きな一時テンソルから来ます。モデルアーキテクチャ、テンソルデータ型、およびトレーニング実装が提供されていれば、必要なメモリを推定できます。

各要因について、必要なメモリの概算を以下に示します。

  1. ベースの重み → パラメータ数 × パラメータあたりのバイト数
  2. 勾配 → トレーニング可能なパラメータ数 × パラメータあたりのバイト数
  3. オプティマイザの状態 → トレーニング可能なパラメータ数 × パラメータあたりのバイト数 × オプティマイザの状態数
  4. アクティベーション → バッチサイズ × シーケンス長 × 隠れ次元 × (バイト/テンソル) × (テンソル/レイヤー) × レイヤー数
  5. ロジット → バッチサイズ × シーケンス長 × ボキャブラリサイズ × (バイト/ロジット)

FP32状態テンソルを使用するAdamWオプティマイザ、bf16重み、バッチサイズ4、シーケンス長2048、語彙サイズ150kの2Bパラメータモデルの概算メモリは次のとおりです。

カテゴリ概算
モデル重み: 2Bパラメータ × 2バイト/パラメータ4 GB
勾配: 2Bパラメータ × 2バイト/パラメータ4 GB
AdamW状態: 2Bパラメータ × 2状態 × 4バイト16 GB
アクティベーション: 4 × 2048 × 2048 × 2バイト × 12 × 2811.3 GB
ロジット: 4 × 2048 × 150k × 2バイト2.46 GB
合計37.7 GB

1~2GBのヘッドルームを含めると、約40GBのVRAMになります。それも楽観的です。

  • 混合精度トレーニングでは、通常、FP32の重みの追加コピーが保持されます(+8GB)。
  • ロジットは損失のためにFP32にアップキャストされることが多く、そのバケットが倍増します。

では、これは16GBのVRAMにどう収まるのでしょうか?

3つの最適化により、5つの要因のうち4つをほぼゼロに縮小でき、ベースの重みが主なコストとして残ります。

LoRA → 勾配とオプティマイザの状態を縮小

LoRAは元の重みを凍結し、代わりに小さな更新を学習します。各更新は、2つの低ランク行列の積、ΔW = B·Aとして書き込まれます。勾配とオプティマイザの状態は、AとBのみが取得します。

  • ランク16の2048×2048行列1つでは、完全な行列は約4.2Mパラメータです。AとBを合わせると、わずか2 × 2048 × 16 ≈ 65kで、これは64倍少ないです。
  • モデル全体では、LoRAは通常約1%のパラメータ、ここでは約20Mをトレーニングします。それらの勾配とオプティマイザの状態はわずか約0.25GBです。

LoRAは凍結されたベースの重み自体を縮小しません。QLoRAは、それらを4ビットで保存することで縮小し、4GBから約1GBになります。

勾配チェックポインティング → アクティベーションを縮小

通常、フォワードパスのすべての中間アクティベーションは、バックワードパスのために保持されます。チェックポインティングを使用すると:

  • 各レイヤーの入力のみを保持し、中間を破棄します。
  • バックワードパス中に、そのレイヤーのフォワードパスを再実行してそれらを再生成します。

ここでは、28個のレイヤー入力(約0.9GB)と1つのレイヤーの中間(約0.4GB)を一度に格納する必要があります。これは約1.3GBで、約11.3GBの代わりになります。コストは追加のフォワードパスであり、通常、トレーニングを20~30%遅くします。

融合/チャンク化クロスエントロピー → ロジットを縮小

Liger KernelやCut Cross-Entropyのようなカーネルは、チャンクで損失を計算します。完全なバッチ × シーケンス長 × ボキャブラリサイズのロジットテンソルは、メモリに一度に存在しません。一度に小さなスライスのみが具体化されるため、このバケットは最大でも数百MBに減少します。

これらの最適化の後、必要なメモリは約7~8GB(CUDAオーバーヘッド込み)に縮小されます。残りのメモリは、より大きなバッチサイズやより長いシーケンスに使用できます。

データセットの調達/構築

使用したデータセット: No Robots、Databricks-Dolly

コード生成リクエスト、空の例、重複したプロンプト、150語を超えるプロンプト、および人間の応答が300語を超えた例を除外しました。また、No Robotsのペルソナベースのチャット例もドロップしました。なぜなら、「韻を踏んで答えて」のような指示は、別の制約を追加するからです。

フィルタリングと独自の分割を行った後、次のようになりました(これらのプロンプトのほとんどは未使用になりました)。

スプリットプロンプト数
トレーニング18,000
検証200
テスト500

発見したもう1つの問題: いくつかのプロンプトは「e」なしでは答えられません。「What’s the capital of Belgium?」は「Brussels」が必要です。「Who painted the Mona Lisa?」は「Leonardo」が必要です。トレーニングとテストに使用したすべてのプロンプトからこれらを除外しました。

スプリット全体を使用する代わりに、実験でデータが必要なときにそこからサンプリングしました。評価セットは、検証スプリットからの50プロンプトです。RLプールは当初2,000プロンプトから始まり、サブエージェントによって1,235に絞り込まれました。

審査員を公平に保つ

審査員を公平に保つためのいくつかのルールがあります。

  • 審査員は「e」のルールを知らされていないため、タスクが難しいからといって奇妙な応答に甘くすることはできません。
  • 間違った事実は、プロンプトを試みている限り、応答に対して不利にはなりません。1.7Bモデルは多くの事実を間違えますが、ここでは文章作成のみを気にかけています。

また、審査員が厳しすぎないかも確認しました。「e」のルールなしでQwenを評価セットで実行し、コヒーレンスと応答のみを審査しました。通常の応答はほとんどの場合パスするはずなので、80%以上を目指しましたが、Qwenは80.5%でした。その過程で、一般的な問題(行の繰り返し、トークン制限による応答の打ち切り)を捉えるために、審査員のプロンプトを調整しました。審査員コードはGitHubリポジトリセクションにリンクされています。

「e」なしのRL

最初のステップは、モデルに計算された応答を「e」トークンなしで出力させることでした(偶然ではなく)。フォワードパスを実装し、LoRAを追加した後、元の重みを凍結し、アダプターのみをトレーニングしました。同じプロンプトの8つのコピーを使用し、思考を無効にし、最大64トークンを生成しました。

プロンプト: respond without using the letter 'e'

アイデアは、データセットや一般化を気にする前に、この1つの例に過学習させることでした。応答を生成し、それをスコア付けし、そのスコアを使用してモデルを更新します。1つの文字を避けるのはどれほど難しいでしょうか?

最初に、'e'のない単語ごとに1ポイントを与えました。それでも、有効な単語が含まれている限り、ルールを破る応答に正の報酬を与えました。バッチ全体で報酬を中央値化して、より良い応答を優先しようとしましたが、サンプルはしばしば非常に似ていました。また、応答のどの部分が問題を引き起こしているかについて、より具体的なシグナルを求めていました。

そこで、個々のトークンに対する報酬ルックアップテーブルに移行しました。

for tok, idx in tok_to_id.items():
    if 'e' in tok.lower() and tok != eos_token:
        e_table[idx] = -1.
    else:
        e_table[idx] = 0.5

トークンは必ずしも単語全体ではありません。gr + eenのような分割では、2番目のトークンのみを罰すると、単語の作成に役立った早い方の選択を見逃してしまいます。割引された将来の報酬を使用したため、後からのペナルティも早い方の選択に影響を与える可能性があります。これらは、リターン計算とポリシー損失からの短縮された抜粋です。

# rewardsを逆順に処理しながら、応答を逆順に処理:
for t in reversed(range(rewards.size(1))):
    running = rewards[:, t] + gamma * running
    returns[:, t] = running

# トレーニングループに戻る:
rewards = get_feedback(gen_ids, e_table)
per_token_reward = discount(rewards)
advantage = (per_token_reward - per_token_reward[mask].mean()) * mask
loss = -(log_probs * advantage).sum()

平均を引くことで、各トークンはバッチ内の有効なトークンリターンに対して相対的なアドバンテージを得ました。正のアドバンテージはサンプリングされたトークンの確率を押し上げ、負のアドバンテージはそれを押し下げました。

これはある程度機能しました。一部の応答は「i want to know what you want to know」に落ち着きましたが、これはルールに従っていますが、あまり応答になっていません。他のサンプルは、報酬を集めるより簡単な方法を見つけました(抜粋)。

応答: i m k t r n l d g h j z p q w x y f v b c …

'e'のないトークンに報酬を与えていましたが、単語を形成せずに文字のストリームでその目的を達成できました。報酬値はリトライごとに変化しましたが、これらのルールのどれも、出力が意味をなすかどうかを直接測定しませんでした。

私の次のアイデアは、KLペナルティを使用して元のモデルからの逸脱を罰することでした。LoRAを無効にして同じ生成シーケンスをモデルに通し、サンプリングされたトークに割り当てられた対数確率を比較しました。その後、この調整を報酬に追加しました。

kl_approx = (log_probs.detach() - ref_gen_log_probs) * mask
rewards = get_feedback(gen_ids, e_table) - kl_beta * kl_approx

これは、モデルが元の言語行動を放棄するのを思いとどまらせるはずでしたが、出力は依然として崩壊しました。後で、KLペナルティが他の報酬と比較して小さすぎたことがわかりました。保存されたサンプルの一つは次のとおりです。

応答: Tst, tkt, nkt, tkt, nkt, tkt.

より小さなボーナス、トークン長でスケーリングされたボーナス、'e'に対するより強いペナルティ、および割引係数の変更を試しました。一部の実行はナンセンスを生成し、他の実行は同じ文を繰り返すのに stuck しました。最初からのより強いペナルティは、単一文字と改行の出力を促進しました。

この初期テストから、実際のサンプルを見ることが重要であることに気づきました。これらの実行は、対策があっても、報酬がいかに簡単にゲーム化される可能性があるかを示しました。

1.7B vs 4B

ある時点で、1.7Bは小さすぎると仮説を立てていました。より大きなモデルを選択すべきだったかどうかを確認するために、Qwen3-1.7Bと4Bを比較することも試しました。評価セットでは、次のようになりました。

設定1.7B4B
マスクなし、コヒーレンスと応答のみで審査80.5%87.5%
「e」を使わないように指示、マスクなし0%0%
「e」を使わないように指示、マスクあり26%12.5%

どちらのモデルも、指示だけでルールに従うことはできません。'e'を避けた応答は一つもなかったため、どちらにしてもマスクが必要です。さらに、4Bモデルはマスクの下では劣っています。計画していた単語を書き続け、'e'をドロップするだけで、「the」を「th」に、「amusement park」を「amusrmt park」のようにします。1.7Bモデルは、別の単語に切り替えることがより頻繁でした。

そのため、実験では1.7Bを使い続けました。これは、ローカルで実行できた1つのモデルファミリーの2つのサイズのみを比較したものです。新しいモデルや、より多くの英語テキストでトレーニングされたモデルの方が良いかもしれません。


[2] タイトル: Mac Studio M5 Ultra 512GB Officially Released
URL: https://www.apple.com/shop/buy-mac/mac-studio
本文:

Mac Studioを購入する

新登場

[

Mac Studio, M5 Max チップ, 18コアCPU, 40コアGPU, 64GBメモリ, 1TBストレージ

](https://www.apple.com/shop/buy-mac/mac-studio/m5-max-chip-18-core-cpu-40-core-gpu-64gb-memory-1tb-storage)

[

Mac Studio, M5 Max チップ, 18コアCPU, 32コアGPU, 36GBメモリ, 512GBストレージ

](https://www.apple.com/shop/buy-mac/mac-studio/m5-max-chip-18-core-cpu-32-core-gpu-36gb-memory-512gb-storage)

[

Mac Studio, M5 Ultra チップ, 30コアCPU, 64コアGPU, 96GBメモリ, 1TBストレージ

](https://www.apple.com/shop/buy-mac/mac-studio/m5-ultra-chip-30-core-cpu-64-core-gpu-96gb-memory-1tb-storage)

よくある質問

  • PCからMacに乗り換えます。新しいMacのセットアップやファイルの転送は簡単ですか?

はい、Macへの乗り換えは簡単で、Macの使い方はiPhoneを使うのと同じくらい簡単だと感じるでしょう。MacはiPhoneやその他のAppleデバイスとシームレスに連携します。

すでにiPhoneをお持ちなら、Macのセットアップはあっという間です。iPhoneをMacの近くに持っていくだけで、セットアップアシスタントがWi-FiネットワークとAppleアカウントにサインインしてくれます。iCloudからファイル、写真、メッセージ、パスワードなどが新しいMacに転送されます。

iPhoneをお持ちでない場合でも問題ありません。すべてのMacにプリインストールされている移行アシスタントを使えば、PCや既存のMacからドキュメント、アプリ、アカウント、設定を簡単に転送できます。転送が完了すると、すべてが新しいMacで利用できるようになります。

さらにヘルプが必要ですか?パーソナルセットアップでは、スペシャリストとの無料のオンライン個別セッションを利用でき、セットアップを案内し、新しいMacを最大限に活用する方法を教えてくれます。何よりも、都合の良いときに、どこからでも参加できます。

  • Appleは、高等教育機関の学生、保護者、教師に特別な割引やプロモーションを提供していますか?

Appleには、お客様のニーズに特化したエデュケーションストアがあります。Mac、iPad、ソフトウェア、アクセサリーの割引、プロモーション、バンドル取引を見つけることができます。また、Appleデバイス、ソフトウェア、アプリをより効果的に活用して学習と教育を強化する方法を学ぶためのツールやリソースにもアクセスできます。

教育割引の対象となる製品には、卒業帽のアイコンが付いています。チェックアウト時に、有効な学校のメールアドレスやその他の書類で資格を確認する必要がある場合があります。確認方法は国によって異なります。

エデュケーションストアを検索(新しいウィンドウで開きます)

  • 注文品を最も早く受け取るにはどうすればよいですか?また、配送オプションは何ですか?

ほとんどの都市部では、Apple Storeから利用可能な在庫品について、同日予約配達を提供しています。2時間配達の料金は9ドルです。チェックアウト時に配達日と時間を選択します。在庫状況によります。また、お近くのApple Storeに立ち寄って、在庫状況と当日受け取りのオプションを確認することもできます。

チェックアウト時に選択できる配送オプションは、お客様の場所と製品の在庫状況によって異なります。多くのMac構成は店舗での出荷または受け取りの準備ができていますが、一部のカスタム構成は配達の見積もりやオプションに影響を与える可能性があります。

apple.comで注文された商品は、購入した国または地域内にのみ発送できます。製品を配送したい場所のオンラインストアにアクセスしてください。

  • Macを外部ディスプレイに接続できますか?

はい。接続できる外部ディスプレイの数は、Macのモデルとチップによって異なります。また、ディスプレイの解像度によっても異なる場合があります。

各Macモデルの外部ディスプレイへの接続に関する詳細を確認してください。

一括払い、Appleでの分割払い、または対象のMacをApple Upgradeでリースすることができます。

Appleは、Apple Pay、ほとんどのクレジットカードとデビットカード、PayPal、Apple Gift Card、Apple Cardを受け付けています。同じ請求先住所を共有している限り、複数のカードに支払いを分割することもできます。

Apple CardでAppleでチェックアウトすることを選択した場合、新しいデバイスを利息なしで分割払いできます(脚注◊)。また、 upfront で3%のDaily Cashバックを受け取ることができます。

まだApple Cardをお持ちでない場合は、Apple Card Monthly Installmentsを支払いオプションとして選択し、購入に使用する際に、わずか1分で申請できます。

Apple Card Monthly Installmentsについてさらに詳しく(新しいウィンドウで開きます)

全額をApple Cardで支払ったが、Apple Card Monthly Installmentsを使用した利息なしの分割払いを利用するつもりだった場合は、切り替えをお手伝いできます。Apple Cardスペシャリストに877-255-5923までご連絡ください。WalletのApple Cardをタップし、右上隅の「もっと見る」ボタンをタップしてから「メッセージ」をタップして、スペシャリストとチャットすることもできます。

  • Apple Upgradeはどのように機能しますか?

Apple Upgradeは、Klarnaと提携して提供されるリースプログラムです。iPhoneまたはApple Watchを12または24ヶ月、iPadまたはMacを24または36ヶ月リースします。その後、期間終了時に新しいデバイスに簡単にアップグレードできます。残りのリース支払いの全額と該当する税金を支払うことで、早期にアップグレードすることも可能です。いずれの場合も、元のデバイスを良好な状態で返却する必要があります(脚注∆)。

希望するApple製品を選択し、支払いオプションとしてApple Upgradeを選択し、最適な期間を選択して、チェックアウト時に申請を完了することで、Apple Upgradeに登録できます。

  • Apple Trade Inはどのように機能しますか?

Apple Trade Inを使えば、新しいMacの購入クレジットを簡単に獲得できます。デバイスとその状態について数個の質問に答えるだけです。それに基づいて、推定下取り価格を提供します(脚注§)。オンラインで購入し、Apple Card Monthly Installmentsで支払うことを選択した場合、その金額を即時クレジットとして適用し、新しいデバイスの月々の支払いを減額します。全額を支払う場合は、下取り品を受け取った後に支払い方法にクレジットを適用します。クレジット対象外の場合は、無料でリサイクルするための簡単な方法を提供します。

下取り対象の場合、無料の下取りキットをお送りします。新しいデバイスと一緒に受け取ることもあります。それ以外の場合は、注文の準備が整い次第、別途郵送されます。下取りキットを受け取ったら、14日以内にデバイスを準備して発送してください。

下取り品を受け取り次第、状態を検査して確認します。すべて問題がなければ、それ以上何もする必要はありません。デバイスの状態が説明と一致しない場合は、次のステップを記載したメールが届きます。

全額を支払い、デバイスの価値が新しいMacのコストを上回った場合、残額はApple Gift Cardとしてメールで届きます。

オンラインでの下取りプロセスは、最大2~3週間かかる場合があります。購入時にApple Storeでデバイスを下取りに出すこともできます。ただし、店舗での下取り価格は、オンラインで受け取った推定下取り価格と異なる場合があります。

  • AppleCareはどのような保護を提供しますか?

AppleCare+は、新しいMacの標準保証を延長します。落下や液体こぼしなどの事故に対する無制限の修理、およびバッテリー交換を無料で行えます。また、Appleの専門家による24時間年中無休の優先サポートにアクセスできます(脚注±)。

AppleCare Oneを選択した場合、AppleCare+のすべての特典を最大3台のデバイスで利用でき、さらにiPhone、iPad、Apple Watchの盗難・紛失補償も含まれます(脚注†)。

アクティブなAppleCare+プランをお持ちの場合でも、AppleCare Oneプランにアップグレードできます。その他の対象デバイスは、現在Appleアカウントに関連付けられているデバイス、1年未満のAppleオーディオまたはヘッドフォン、および4年未満で良好な状態のその他のAppleデバイスです。プランを切り替える際に、現在のプランは自動的にキャンセルされ、未払い額は返金されます。

AppleCare+についてさらに詳しく(新しいウィンドウで開きます)

  • Macを返品または交換できますか?

気が変わってMacをもう保持したくない場合は、返品または交換することができます。返品されたデバイスは、良好な状態で、元のパッケージ(すべての付属品、マニュアル、説明書を含む)に入っている必要があります。返品はAppleの販売および返金ポリシーの対象となります。

返品、返金、交換についてさらに詳しく(新しいウィンドウで開きます)

新しいMacには、さらに多くのものが付属しています。

Appleデバイスの購入で、対象サービス3ヶ月無料。
(脚注‡)

[画像: Apple TV, Apple Music, Apple Arcade, Apple News+]

学生と教育関係者 — 新しいMacをお得に。

エデュケーションストアで特別価格をご利用ください。

今すぐ購入 学生と教育関係者 — 新しいMacをお得に。