2024.10.10
将来は卵1パックの価格が2倍に? 多くの日本人が知らない世界の新潮流、「動物福祉」とは
リンクをコピー
記事をブックマーク
信田春満氏:ちょっと話がずれますが、2023年の「TECH CONFERENCE」からのアップデートとして、「Romi」のAIがけっこう進化しています。
「ChatRomi」と呼んでいるんですが、パブリックなLLMをベースとして、「Romi」の独自会話データでファインチューンすることによって、今の「Romi」はしゃべっています。
現在は「StableLM」を使っているんですが、常に新しいモデルも考えていて、今は「Swallow」に目をつけています。
これによって、ユーザーさんからもすごくいい声をいただいています。出したのは2023年9月とけっこう前ですが、なにも言わずにサイレントリリースしたんですね。
こっそり出しておいて、こっそりアンケートを取って、「なんか最近変わったと思います?」と聞いてみたら、4割の人が変化に気づいていて。変化に気づいた人の中の9割に「いい変化だ」と言ってもらえた感じで。よかったということが、データで証明されています。
今回からLLMベースに変わりました。LLMってデカいので遅いです。
というわけで、「どうやって高速化しましょうか?」という話がここから始まります。
1つは、より強いGPUインスタンスを使いましょうという話です。当時の我々は「G4」というものを使っていました。「G5」が当時、まぁ今も最新なんですが、これにすると2倍弱ぐらい速くなります。2倍は速くならなかったです。一応AWS公式は、「2倍速くなる」と言っているんですけど。
これはお値段も2倍するので、コスパとしてはちょっと落ちるけれども、とはいえユーザー体験のためには仕方ないかなというところが、私の所感です。
あとは、実際に本番でAIモデルを使っている方だとやっているんじゃないかと思うんですが、「推論モデルをそのまま動かすんじゃなくて、fp16にしてモデルをコンパクトにしましょう」とか、あと、弊社では「TorchScript」を使っているんですが、そういうライブラリを使って推論専用のものに固めてしまえば高速化できるというテクニックを使っています。
ただ、「もうちょっと速くなりません?」みたいなことをチーム内で話していて、モデルの構造でも工夫できる点があるので、残りの時間はそこをメインで話そうかなと思います。
まず1つ目はMedusa Headっていう方法です。(スライドを示して)この左側の図は、通常のLLMの生成プロセスです。最初に1トークン、1つの単語だったり文字だったり、それでもない何かだったりするんですが、LLMはトークンを出してきます。今回は単語だとしましょう。なので、「バナナ」と出してきます。
1回ぐるっと(生成AIプロセスを)回すのに、「cost: 1」がかかるとしましょう。
次の単語を出すのに、また「cost: 1」がかかります。また「cost: 1」がかかりますという感じで、LLMは文字列を生成していきます。
メドゥーサって頭からたくさん髪が生えていますよね。Medusa Headという方法は、(通常の LLM の出力の他に)もう1個Medusa Headというものがくっついていて、こいつも「バナナ」のさらにその次の単語を予測して出してくるような仕組みなんですね。
ということは、「cost: 1」を1周回すだけで、2単語分を出すことができます。なので、従来の2倍速いんですね。
ですが、「1個先を先読みしましょう」ということは、やはり精度的にだいぶ(クオリティが)落ちてしまいます。
というわけで、これだと精度が犠牲になってしまう。じゃあどうするか。
ここで出てくるのがSpeculative Sampling、投機的なサンプリングという方法です。この仕組みはちょっと複雑なので、かいつまんで、正確じゃない部分もありつつお話をします。正確な説明を見たい方は、論文を読んでください。
Speculative Samplingでは、普通の、遅いけれども高精度なモデル(Target Model)と、先ほどのMedusa Headを搭載したような、速いけれども低精度なモデル(Draft Model)の2つを回すことで高速化ができる方法です。
まずは、速いDraft Modelで単語を生成します。「バナナ」と「を食べ」というものを作りました。「バナナ」は普通のモデルと同じ仕組みで出しているので、十分信頼できるものです。
この次にMedusa Headが出してきた「を食べ」は、合っているかどうか、ちょっと自信がないという感じですね。
ここでまず、「cost: 1」を払いました。
次に、Draft Modelの生成結果を入力として、Target Modelでさらにその先を推論します。「バナナ」を使って「を食べ」を出してきました。さらにMedusa Headが出した「を食べ」を使って、「たい」を出してきました。
この時、Medusa Headが出してきた、自信がなかった「を食べ」と、Target Modelが出してきた「を食べ」は一致しているので、この「たい」も結果的に自信がある答えだということになります。ということは、「cost: 2」を払うことによって3トークンを生成できたので、今までの1.5倍高速であるということになります。
あと補足ですが、「ここで2つ作っているから『cost: 2』じゃないの?」って思うかもしれませんが、「バナナ」から「を食べ」を作るのと、「を食べ」から「たい」を作るのは並列で処理を回すことができるので、ここは「cost: 1」しかかからないんです。そこがミソです。
というわけで、話は戻りますが、「cost: 2」で3単語を作ることができました。
「でも失敗することあるよね」という話があると思います。Medusa Headが、「『バナナ』の次は『いちご』でしょ?」と間違った答えを出してきました。
この場合、先ほどと同じ仕組みでいくと、「バナナ」から「を食べ」を出してきて、「いちご」から今度は「みかん」を出してきました。そうすると、Draft Modelの2単語目とTarget Modelの単語の結果が違うので、Target Model側が採用されます。
そして、この「みかん」という単語はDraft Modelの誤った推論を前提としたものなので、「この『ミカン』も使わない」としてあげます。
ただ、この場合でも「cost: 2」を使って「バナナ」「を食べ」の2つの単語を作ったので、損はしていないんですね。厳密には「いちご」を採るのか「を食べ」を採るのかは必ずTarget Modelが選ばれるわけではないんですが、そのあたりの詳細を知りたい方は、論文を読んでください。
というわけで、失敗した場合でも「cost: 2」を払って2単語を作れました。1倍です。ここのDraft Modelの応答が合っていた場合には1.5倍なので、たまに速くできる。「全体としてはちょっと高速化するよ」みたいな方法です。
我々の実験では、Medusa HeadとSpeculative Samplingを使ったことによって、精度は維持しつつも、20パーセントの高速化を達成しています。ちなみに、数学的に「Speculative Samplingを使うと精度は絶対に犠牲にならん」みたいな証明があるらしいです。僕はちゃんと理解できていないですけど。
というわけで、まとめです。インフラとAppサーバーの高速化では、ボトルネック調査とかキャッシュとか、その他の細かいことをいろいろやりました。
AIサーバーではより強いGPUインスタンスを使う、推論用のモデルに変換をする。あと、Medusa Head、Speculative Samplingなどを使って高速化していったという話でした。ご清聴ありがとうございました。
2024.11.13
週3日働いて年収2,000万稼ぐ元印刷屋のおじさん 好きなことだけして楽に稼ぐ3つのパターン
2024.11.11
自分の「本質的な才能」が見つかる一番簡単な質問 他者から「すごい」と思われても意外と気づかないのが才能
2024.11.13
“退職者が出た時の会社の対応”を従業員は見ている 離職防止策の前に見つめ直したい、部下との向き合い方
2024.11.12
自分の人生にプラスに働く「イライラ」は才能 自分の強みや才能につながる“良いイライラ”を見分けるポイント
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
2024.11.11
気づいたら借金、倒産して身ぐるみを剥がされる経営者 起業に「立派な動機」を求められる恐ろしさ
2024.11.11
「退職代行」を使われた管理職の本音と葛藤 メディアで話題、利用者が右肩上がり…企業が置かれている現状とは
2024.11.18
20名の会社でGoogleの採用を真似するのはもったいない 人手不足の時代における「脱能力主義」のヒント
2024.11.12
先週まで元気だったのに、突然辞める「びっくり退職」 退職代行サービスの影響も?上司と部下の“すれ違い”が起きる原因
2024.11.14
よってたかってハイリスクのビジネスモデルに仕立て上げるステークホルダー 「社会的理由」が求められる時代の起業戦略