CLOSE

ChatGPTなどの言語モデルはどのようにシステムで使えるか(全2記事)

「自分でLLMを動かすことでイメージがつきやすくなる」 ローカルで使うメリットと、日本語特化LLMを動かすために必要なスペック

システムから言語モデルがどのように使えるか、その時どういうことに気をつける必要があるかを考える「『ChatGPTなどの言語モデルはどのようにシステムで使えるか』きしだなおき氏」。ここで、LINE Fukuoka株式会社のきしだなおき氏が登壇。続いて、システムがChatGPTをどのように使うかと、日本語特化のLLMについて話します。

システムはChatGPTをどのように使うか

きしだなおき氏:今、人間がどう使うかという話を中心に話しました。(次に)じゃあシステムからどう使うかとなると、APIを使った利用になりますね。

今日(2023年6月14日時点)朝起きたら「関数定義が可能になったよ」みたいなものが出ていて。今回の(セッションで話した)概要(の内容)とか…。(この概要は)昨日になってやっと(運営に)送ることができたんですけど、「どういう話をしようか」と思って朝起きたら、毎日状況が変わっているんですよね。

動かなかったものが動くようになっている。もっと小さく動かせるようになっているとか、もっと高性能なものが出ているとか。この2、3ヶ月ぐらいは本当に毎日毎日(状況が)変わってきていますね。

どういう話をすればいいかがちゃんとフィックスできなかったので、わりと雑なプレゼンテーションになっています。まぁ、いいや(笑)。

APIで関数定義が可能になった。今までは文章を与えて返ってきた言葉を、ちゃんと「JSONで返して」と念を押して書いても、JSONで返して、最後に「こいつがJSONです」「これがHTMLです」みたいな、余計な一言を付け加えたりするんですね。そういうことがなくなった。「こういう関数があるので、この文章から適切な関数呼び出しを作ってください」みたいなことができるようになったというのが、今日の朝の発表でした。

あと、プラグインはChatGPTのサービス……。(スライドを示して)先ほど見せましたが、これはプラグインですね。文章の中で適切にサービスを呼び出して、それを使った結果を出してくれます。

そうすると、自分たちのデータを使った処理がやりやすくなるということです。

あとEmbeddingというのがあって。これはサービスからはわかりにくいんですが、実は一番使いやすいというか、これを中心にしてシステムを作ることがかなり多いと思います。

文章をベクトル化、矢印にするということですね。2つの文章の方向が近ければ「だいたい近い文章だ」(と判断する)みたいなことができるようになるというものです。これは基本的にシステムを作る時に使うことになると思います。

どういうものかというと、文章を……。ベクトルは矢印なんですね。ChatGPTの場合は1,500要素の配列で返ってくるわけです。「ベクトル的に方向が近ければ似た文章だ」ということで、文章の検索に利用できる。

これは例を出していますが、僕のブログを全部突っ込んで……。突っ込んで、というか矢印に変換して、その矢印の情報はChatGPTではなく自分で持っています。検索クエリもChatGPTに矢印にしてもらって、その矢印に近い情報を自分で探して近いやつを出す。そういったことができています。

ビジネス利用の場合、文章検索はかなりあると思うので、実はこれが一番使うことになると思います。なので、これは1回ちゃんと試しておいたほうがいいし、コンセプトが何かは知っておいたほうがいいと思います。

ChatGPT以外の言語モデル

あと、ChatGPT以外の言語モデルの話で、ChatGPT、OpenAI以外にもGoogleがPaLM 2というものを発表して、Bardとかいろいろなもので使っている。Metaの場合は自社で使っているという話は出てきていませんが、LLaMAとかOPTとか、そういったオープンに使えるモデルを出してきています。LLaMAって羊が縦に伸びたような動物ですが、MetaがLLaMAというのを出したので、Alpacaだとか、あのあたりのシリーズでいろいろな言語のいろいろなものが出ています。

日本語特化のLLMのパラメーター数

そうすると、日本語特化のLLMというのもいっぱい出てきたんですね。(スライドを示して)これは発表順に出しています。

言語モデルのサイズがパラメーター数で示されるんですが、ChatGPTのGPT-3.5が355ビリオン、3,550億パラメーターと言われています。GPT-4は非公表ですが、500Bから1,000Bぐらいという規模感で、相当でかいです。

僕はLINEにいますが、HyperCLOVAに関しては、公表されていること以上のことは僕も知らないので、あまり突っ込まないでください。

いろいろ出ていますが、感覚としてはだいたい13Bを超えるとわりと賢くなる。160Bとか140Bとかあるとけっこうな性能があるのではないかなというのが想像できます。このあたりは公開されておらず、プロプライエタリな利用になるので、どういうものか実際にはわかりませんが、オープンなものも出てきていますね。

例えば、ABEJAがオープン版の「ABEJA LLM」というのを出しています。あとはサイバーエージェントが「OpenCALM」を出していて。あとrinnaが、特別なモデル名はついていないと思いますが、3.6Bのモデルを出しています。この3つは自分たちで使うことができるので、みんないろいろいじくり回していますね。

rinnaのモデルは3.6Bですが、3.6Bにしてはかなり賢いです。

(画面を示して)ちょっと今動かしていて……。ちゃんと動くかどうかはわからないんだけど、どんな感じか見せますね。見せられるんだろうか?

これは裏側でrinnaを動かしているんですけど、聞いたら……。嘘をついている(笑)。前に試した時はちゃんと出してくれたんですけど。

だいたいこんな感じです。今僕のコンピューターで動かしているので、このぐらいの早さで(答えが)出てきてはくれます。あと、このぐらいの賢さで返してくれます(笑)。ただ賢さ以前に、ちゃんと会話になるというところがすごいんですね。先ほども「イタリアは?」と聞いたら、ちゃんと同じように答えてくれていますね。

文脈をちゃんと意識して、「『エヴァンゲリオン』で誰が好き?」と言った時も、「どんなところが?」と書いたら、どういうところが(好きか)をちゃんと答えてくれています。

わりとちゃんとしたやり取りができるようになっています。3.6Bにしてはちゃんとやれるなというのがやはりすごいところですね。もっとモデルを大きくしていけば、どんどんいい感じになっていくわけですね。

LLMを動かすために必要となるスペック

今動いてるのでそのリソースを見せると、タスクマネージャーは8.7GBとかを使っていますね。RTX A4000を使っているので16Gのメモリがあるんですが、8.7GBなので、わりとGPUを選ぶと思います。

じゃあ、これがどのくらい使う(の)かという話ですが、単純に1パラメーターを32bitのFloatにすると……。32bitなので4バイトですね。なので、パラメーター数の4倍。16bit Floatだと1つのパラメーターにつき2バイトなので、パラメーター数の2倍。なので、rinnaの3.6Bだと倍にして7.2GBで。7.2GBよりちょっと要るということで、8GB程度のGPUのメモリが要るという感じですね。

(画面を示して)これを見ると、13Bだと26GB要るというのがわかりますね。26GB載っているGPUは、パソコン用としては出ていない。パソコン用というか個人用としては出ていなくて、業務用みたいなわりと高いやつになっていきます。40ギガだとたぶん7、80万円出せば買えるみたいな感じですね。

もっとでかいと(なると)、もう何百万円も出さないと買えない。80ギガだと500万円出さないと買えないみたいになっています。160Bだと320GBのメモリが要るので、「わりと大変だな」みたいな想像ができるわけですね。

「それはちょっと困るよね」みたいなことで……。目が覚めたら状況が変わっているということは、だいたいこのあたりのことを言っています。どんどん小さいメモリで動くようになってきているし、CPUで動かすのもかなり活発に、いろいろな変更が起きています。

例えばInt8、8bitのIntでパラメーター数を表して動かす。

(スライドを示して)そうすると、ここに書いているとおりのGB数のメモリになるわけですね。13Bでも13GBだから、16ギガのメモリ。僕のところで動くのではと思ったんですが、ちょっと動かせていないですね。

さらに4bitの量子化みたいなことをやっていて、そうするとパラメーター数が半分になる。rinnaの3.6Bだと2GBで動く。そうすると、もういろいろなところで動かせますよね。さらにCPUで動かすということも活発になっていて。rinnaの3.6Bを4bit量子化して、スマホ、iPhoneで動かすということをやっている人がいます。

じゃあなぜそうやって手元で動かすかというと、いろいろな実験がやりやすい(から)ですね。今回資料には載せなかったんですが、LLMを動かしながらパラメーターを全部ゼロにリセットしていったらどんどんバカになるかなとか思って試したことがあって、実際どんどんバカになっていきましたね……。そういう実験がやりやすい。

GoogleのColabとかそういったところで動かすと……。そういうのもいいんですが、わりとアホなことがやりにくいし、課金があるとちゃんとしたことをやりたくなるので、自分のGPUで動かすのが一番お勧めですが、GoogleのColabとかでも十分動かせるので、そこで試すのもいいと思います。

自分で動かすと、どんな感じで動くかが体感しやすいです。イメージがつきやすい。そのイメージが正しいかどうかは別として、イメージがつくことが大事だと思います。

さらに独自の学習ができる。LLMに対して自分のデータを突っ込んで、LLMをFine TuningすることができるのがローカルのLLMのメリットです。

ChatGPT-3.5はFine Tuningがあったんですが、GPT-4にはないので、Fine Tuningできなくなっています。Fine Tuningをしなくてもわりと使えるみたいなものがあるんだとは思いますね。あと、GPUをめちゃくちゃ使うから、コンピューティングリソースが足りないんだと思います。

Fine Tuningとプロンプトの違い

じゃあFine Tuningとプロンプト(の違い)……。プロンプトに「じゃあ、語尾を『ですわよ』にしてください」みたいなことを言うと、ちゃんと「ですわよ」にしてくれるんですが、プロンプトの場合は台本みたいなもので、たまに素が出てきたりしますよ。文章が長くなっていったりすると、なんか素が出てくるみたいなことがあります。

Fine Tuningの場合は教育というイメージ。その素自体を変えていくことができるというのがFine Tuningです。ただデータ量との兼ね合いなので、境目はすごく曖昧なんですよね。

ちょっと今飛ばしましたが、Fine Tuningはデータセットをいっぱい作るわけですよ。結局のところ、データセットはプロンプトに与える例を大量に与えた版なので、プロンプトエンジニアリングの考え方が大事になると思います。

だからどういう例を与えるといい感じに答えてくれるかという、その発展というか、量が多くなったバージョンだと考えることができる。プロンプトエンジニアリングって、けっこうバカにしているというか、あんまり大したことないと思っている人が多いように見えます。僕もちょっとそう思っていたんですが、これに気づいて、やはりプロンプトエンジニアリングはLLMを使うためにものすごく大事な技術であるという認識を今は持っています。

なので、Fine Tuningがかなり大事になっていくので、これも体感しておいたほうがいいと思いますね。どういうFine Tuningをするとどういうことができるようになるのか。そのFine Tuningにはどのぐらいの時間とか、どのぐらいの計算資源が必要か。つまりどのぐらいの計算資源が必要かというのは、どのぐらいの金がかかるかを体感しておくのが大事ですね。

ただ、Fine Tuningには素直にやったらモデルの何倍ものメモリが必要と言われていました。ただでさえ24ギガとか必要だったのに、GPUを3枚挿してとかいっぱい借りてとかが必要になるわけですね。何時間とか(かけて)まわさないといけない。

そうすると、簡単なことをやるだけで1万円とか2万円とか、すぐにかかってしまう。業務でちゃんとやろうとすると、何十万円とかかかるようになってしまうみたいなことがあります。

そこでLoRA(Low Rank Adaptation)という技術が提案されて。少ないメモリでFine Tuningができる。Low Rankの2つの行列に分けて、みたいな。ごちゃごちゃあるんですが、少ないメモリでできるというのがあります。

言語モデルだとちょっとなじみがないかもしれないですが、Stable Diffusionだとかなりそれをやっている人がいます。だからStable Diffusionでアニメの絵を出しやすくするとか、きれいなお姉さんを出しやすくするとか、そういったLoRAがいっぱいあるので、このあたりの感覚は画像生成系のほうが実感しやすいとは思います。それを言語モデルでもやって、いろいろな学習をさせることが大事になってきていますね。

図は「LoRA: Low-Rank Adaptation of Large Language Models」より

ChatGPTは現状実験段階

1時間枠を取ってもらったんですけど、わりと早く終わってしまった(笑)。

結局、現状は実験段階です。だから、ChatGPTを使ったサービスみたいなものがけっこう出てきているので焦るかもしれませんが、半年で出たってということは、半年で実装できるんですね。プログラミング的にはあんまり難しくないし、現状では思ったより使えるみたいなレベルだと思います。

もちろん、めちゃくちゃフィットする業種とかはあるので、そこではものすごく使えるとは思います。今でも使えていると思うんですが、広く使えるようになるには、まだ時間がかかる……。1年か2年かはかかると思います。

(ただ)実際にやってみると、「あんまり使いどころがねぇなぁ」みたいになるわけですね。もうちょっと性能が必要だったり、もうちょっと手軽に動かせるとかが必要だと思っています。ただ、今のうちに実験をして何ができるかとか、どのような制約があるかを体感するのが大事だと思います。今は「実用するぞ」みたいなフェーズではたぶんないので、ちゃんと限定すれば実用できる分野もあるという感じですね。

なので、今はいろいろな実験をしたほうがいいです。その実験のためにもローカルのLLMを動かしたほうがいいですね。GPUを挿しておけばどうにかなるので(笑)。(2023年)7月に16GBが載ったRTX 4060が出ます。

そのあたりは「本気でゲームをやるぞ」くらいの勢いで買える値段なので、やっていろいろ試すといいと思います。

という話で、僕の話は終わりたいと思います。

続きを読むには会員登録
(無料)が必要です。

会員登録していただくと、すべての記事が制限なく閲覧でき、
著者フォローや記事の保存機能など、便利な機能がご利用いただけます。

無料会員登録

会員の方はこちら

関連タグ:

この記事のスピーカー

同じログの記事

コミュニティ情報

Brand Topics

Brand Topics

  • 今までとこれからで、エンジニアに求められる「スキル」の違い AI時代のエンジニアの未来と生存戦略のカギとは

人気の記事

新着イベント

ログミーBusinessに
記事掲載しませんか?

イベント・インタビュー・対談 etc.

“編集しない編集”で、
スピーカーの「意図をそのまま」お届け!