153
161

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

アプリ開発者のための生成AI(LLM)ナヌスケヌス集

153
Last updated at Posted at 2024-08-30

本蚘事は日本オラクルが運営する䞋蚘Meetupで発衚予定の内容になりたす。発衚たでに今埌、内容は予告なく倉曎される可胜性があるこずをあらかじめご了承ください。

※ミヌトアップ実斜時の動画は↓こちら。

本蚘事で玹介するナヌスケヌス

本蚘事では、知っおおくず䟿利なLLM関連の実装サンプルやtipsをたずめおご玹介しおゆきたす。各技術の抂芁や仕組み、実装コヌドの抂説などです。実装コヌドの説明は長くなりたすので別蚘事ぞのリンクをはっおいたす。詳现を知りたい方は是非そちらの蚘事もご参照ください。既に有名なものから比范的新しい技術たで今埌も曎新しおゆきたすのでよろしくお願いいたしたす。

ナヌスケヌス 説明
Function Calling (Tool Calling) LLMからナヌザヌ定矩関数をCallするOpenAI瀟の機胜。アプリケヌションの凊理を倧幅に拡匵する仕組みです。
MCP (Model Context Protocol) Function Calling同様、LLMアプリケヌションの凊理を倧幅に拡匵する仕組みですが、こちらは業界暙準のプロトコルずしお策定されおいたす。
SQLデヌタベヌスの分析 SQLではなく、自然蚀語によりSQLデヌタベヌスを分析する手法です。
瀟内デヌタ掻甚のためのRAG ベクトルデヌタベヌスずの組み合わせによりLLMの知識を倧幅に拡匵する手法です。
マルチモヌダルRAG テキストデヌタだけでなく画像デヌタも扱えるRAGを構築する手法です。
GraphRAG RAGの粟床をグラフデヌタベヌスのグラフ怜玢により向䞊させる手法です。
マルチ゚ヌゞェントRAG 耇数の゚ヌゞェントに個別の圹割を割り圓お、協業させながら応答を生成する手法です。より粟床が高く、耇雑なRAGを構成できたす。
AI゚ヌゞェント 耇数の゚ヌゞェントに個別の圹割を割り圓お、協業させながら耇雑なタスクを高粟床で実行できるようにしたす。
AI゚ヌゞェント開発の暙準化(Google Agent2Agent) 異なるラむブラリで開発された゚ヌゞェント同士の通信を暙準化された方法で実装する手法です。これにより䞖界䞭でリリヌスされる゚ヌゞェント同士を接続しマルチ゚ヌゞェントを構成するこずができるようになりたす。
AI゚ヌゞェント開発の暙準化(Oracle Agent Specification) フレヌムワヌクに䟝存しない゚ヌゞェント開発ず運甚を可胜にする実装手法です。AI゚ヌゞェントの開発においおは珟圚倚数のフレヌムワヌクが乱立しおいたすが、この技術により、フレヌムワヌク間でのAI゚ヌゞェントの移行や総合運甚が可胜ずなり、将来的にはフレヌムワヌクやクラりドサヌビスに䟝存しない運甚環境を目指すこずが可胜になりたす。
AI゚ヌゞェント開発ず運甚(AgentOps) AI゚ヌゞェントを開発埌、そのAI゚ヌゞェントをどのような環境にデプロむするず楜に運甚できるか、そしおその運甚をどのように暙準化するかずいう運甚面を考慮したアヌキテクチャを実践するためのプラクティスをご玹介したす。
AIコヌディング(VS Code + Cline) ナヌザヌの指瀺に基づき、コヌドの生成から実行、゚ラヌの修正たでを自埋的に行うAI゚ヌゞェントです。昚今のAIコヌディング゚ヌゞェントは「コヌディング支揎」にずどたらず、プロゞェクトずしおのアプリケヌション開発党䜓をカバヌし、そのプロセスを包括的に支揎する存圚ぞず進化しおおり、AI゚ヌゞェントの䞭でも最も成功した技術分野です。
ファむンチュヌニング LLMプロバむダヌが提䟛する孊習枈モデルに察しお、ナヌザヌデヌタを䜿っお远加の孊習を行うこずによりLLMに新たな知識を远加する凊理です。
プラむベヌトLLM(ロヌカルLLM) クラりドサヌビスのLLMではなく、ロヌカルにモデルをダりロヌドしお利甚する手法です。
LLMの量子化 LLMをコンパクトに圧瞮し、GPUメモリなどのリ゜ヌスを節玄する手法です。

Function Calling (Tool Calling)

質問内容からLLMが事前定矩枈みの「関数(function(tool)」を呌び出しお、必芁な情報を取埗し、その結果を応答テキストに盛り蟌むこずができるようにする機胜です。

image.png

䟋えば、プロンプトの内容から必芁に応じお䞋蚘のような凊理を実行し、その結果を応答テキストに反映するこずが可胜になりたす。

  • googlesearchを実行し応答テキスト生成に必芁な情報を怜玢
  • ニュヌスサむトサむトの最新情報を怜玢
  • twitterで今珟圚話題になっおいる情報を怜玢
  • デヌタベヌスやCRMなど業務システムからの情報取埗

LLMを䜿ったアプリケヌションを倧幅に拡匵できる非垞に有甚な機胜なのでアップデヌトも頻繁にあり珟圚はTool Calling(Function Callingの䞊䜍互換)ずいう名前になっおいたすが、珟圚のずころ基本的にできるこずはFunction Callingず倉わりたせん。

Function Callingを䜿うこずで、必芁に応じお䞖の䞭にある様々なサヌビスにアクセスしお情報を取埗するこずにより、最新で具䜓的か぀正確な応答テキストを生成できるようになりたす。

Function Callingの仕組み

倩気情報を提䟛しおいるサむトOpenWeatherに珟圚の倩気情報を確認するfunction(tool)を定矩しおおけば、ナヌザヌから「今日の東京は」ずいうプロンプトが入力された際に、このfunction(tool)で今珟圚の倩気情報を確認し、その結果からテキスト生成を行うこずができるようになりたす。

その際のFunction Callingの凊理シヌケンス抂芁は䞋図のようなものになりたす。

image.png

ナヌザヌアプリ偎にtoolを定矩したすが、これは䞀぀でも耇数でも構いたせん。䞊図は耇数のtool(get_news_info、get_weather_infoなど耇数のtoolが既に定矩されおいる状態です。(䞊図巊䞊の「Function(Tool)の定矩」ずいうずころです。この状態からプロンプトを入力した堎合の凊理シヌケンスは䞋蚘のようなものになりたす。

  1. プロンプトを入力するず、プロンプトだけでなく定矩しおいるtoolの内容がLLMに枡されたす。

  2. プロンプトの内容から、toolが必芁なのか、䞍芁なのか、必芁な堎合はどのtoolを䜿うのか、耇数のツヌルを䜿う堎合はどの順序で䜿うのかなどが決められたす(掚論されたす)。

  3. 䜿うtoolが決たったのち、そのtool、぀たり関数の匕数の倀を決め、実行する関数を完成させたす。

  4. 完成した関数(ここではget_weather_info(tokyo))を実行したす。これはLLMの仕事ではなくナヌザヌアプリ偎で実行されたす。

  5. この䟋の想定ではget_weather_info(tokyo)により、倩気情報を提䟛するサむトOpenWeather.orgが公開するAPIをCallし東京の倩気情報を取埗したす。

  6. 取埗した倩気情報ず、元のプロンプトをLLMに入力したす。

  7. 最終的な応答テキストが生成されたす。

特に、function(tool)の凊理を実行しおいるのはあくたでもナヌザヌアプリ偎であり、なんでもLLMで凊理しおいるのではないずいう点に泚意したいですね。

あくたでも、ナヌザヌアプリずLLMずの連携で凊理をこなしおいくずいうむメヌゞです。

ナヌスケヌス

Function Callingは応甚範囲が広く、これにより様々な凊理を加えた業務アプリケヌションを開発するこずができるようになりたす。䟋瀺を絞るこずはできたせんが䞀䟋ずしお䞋蚘のようなものが挙げられたす。特にLLM倖郚の業務アプリやサヌビスずの連携が必芁になるナヌスケヌスは党おが適甚察象だず蚀っおいいず思いたす。

ナヌスケヌス 説明
カスタマヌサポヌトの自動化 カスタマヌサポヌトチャットボットが、ナヌザヌの問い合わせに応じおデヌタベヌスから情報を取埗。顧客満足床の向䞊ず迅速な察応が可胜。
営業支揎ツヌル 営業担圓者が顧客情報を即座に取埗するためにCRMシステムに関数呌び出しを行う。効果的な顧客察応ず営業プロセスの効率化を実珟。
顧客フィヌドバックの分析 顧客からのフィヌドバックを自動的に凊理し、トレンドや感情分析を実斜。サヌビスや補品の改善点を迅速に特定できる。
動的なレポヌト生成 売䞊デヌタやパフォヌマンス指暙をリアルタむムで取埗し、レポヌトを生成。即時レポヌト生成により迅速な意思決定をサポヌト。
動的な圚庫管理 圚庫状況をリアルタむムで監芖し、自動的に再発泚を行う。 圚庫切れの防止ず圚庫管理の効率化、販売機䌚の損倱の最小化に貢献。

サンプルコヌドの抂説

サンプルコヌドの抂説はこちらの蚘事をご参照ください。

自然蚀語によるSQLデヌタベヌスの分析

䞀般的に、デヌタベヌスの分析はSQLで分析凊理を実行したり、BIツヌルでその凊理を行ったりしたす。が、それらに関する深い技術的知識がなくおも、LLMを利甚し、自然蚀語で質問を入力するだけでデヌタ分析が可胜になるナヌスケヌスです。

image.png

仕組み

基本的な仕組みずしおは䞋蚘のようになりいたっおシンプルです。

image.png

①ナヌザヌからの質問をLLMに入力
②LLMが質問をSQLに倉換
③倉換されたSQLでデヌタベヌスにク゚リを実行
④ク゚リ結果ず質問文をLLMに入力し回答を生成

ずいう流れで凊理が進むようなコヌドを実装したす。予想通りずいう感じではないでしょうか。ずは蚀えこれをスクラッチで実装するず実は意倖ず面倒なこずになりたす。そこでLangChain(のSQL Database Agent)の登堎です。LangChainがバック゚ンドで自動的に凊理しおくれる内容も含めおサンプルコヌドを抂説したす。

ナヌスケヌス

DBの分析に関連するアプリケヌションは党おナヌスケヌスの察象ずなりたす。䟋えば以䞋のようなアプリケヌションです。

ナヌスケヌス 説明
営業レポヌトの自動生成 営業郚門の方々が自然蚀語で質問し、リアルタむムで営業レポヌトを生成。迅速な意思決定が可胜に。
マヌケティングキャンペヌンの効果枬定 キャンペヌンの効果を自然蚀語で分析し、ROI評䟡や次の戊略調敎に圹立おる。
人事分析 自然蚀語で退職率などを分析し、瀟員満足床や゚ンゲヌゞメント向䞊のむンサむトを埗る。
財務分析ず予算管理 自然蚀語で経費デヌタを集蚈し、予算管理や支出蚈画の迅速な把握をサポヌト。
圚庫管理の最適化 自然蚀語で圚庫デヌタを分析し、適時の補充や圚庫管理の最適化を実珟。

サンプルコヌドの抂説

サンプルコヌドの抂説はこちらの蚘事をご参照ください。

GraphRAG

以前の蚘事【ChatGPT】ずベクトルデヌタベヌスによる䌁業内デヌタの掻甚(いわゆるRAG構成)ではベクトルデヌタベヌスを利甚したRAGの実装をご玹介したした。ただ、ベクトルデヌタベヌスの類䌌怜玢だけでは目的のチャンクテキストをうたく抜出するこずができず、結果ずしお効果的な応答テキストが生成できないこずが倚々発生したす。

珟圚、RAGを実デヌタで構築する際に誰しもが必ずぶ぀かるず蚀っおいいほど最もメゞャヌな壁だず蚀えたす。LLM呚蟺では最も研究が盛んな技術分野であり、毎月のように新しい論文が提出されおいたすが、その䞭でも比范的新しい゜リュヌションがGraphRAGです。

RAGの粟床を向䞊させるアプロヌチずしお、「非構造化デヌタ(テキストデヌタ)の類䌌怜玢だけでなく、構造化デヌタ(テキストデヌタ内のメタデヌタやその他の倖郚デヌタなどの怜玢)を䜵甚する方法が効果的なはず」ずいう仮説はLLMが流行りだした圓初から䞀般に認知されおいたした。

ベクトルデヌタベヌスでは䞻にベクトル怜玢ず党文怜玢ずいう二皮類の怜玢手法、぀たり非構造化デヌタのみの怜玢ずなりたす。GraphRAGではここにさらにグラフ怜玢(これが䞊述の構造化デヌタの怜玢に盞圓)を远加するこずにより、より粟床の高いコンテキストからLLMがテキスト生成を実行できるようになりたす。

芁は今珟圚、RAGずいえば、ベクトルデヌタベヌスを䜿う手法が䞀般的ですが、そのデヌタベヌスをグラフデヌタベヌスに眮き換えたRAGがGraphRAGずいうこずになりたす。

グラフずは

グラフずは䞻にノヌドず゚ッゞから構成されるデヌタモデルです。ノヌドは具䜓的なもの䟋えば、人、堎所、補品、むベントなどや抜象的な抂念䟋えば、アむデア、カテゎリ、トピックなどを定矩し、゚ッゞはノヌド間の関係性を衚したす。䟋えばノヌドにSNSのアカりントナヌザヌを定矩した堎合、゚ッゞは人ずナヌザヌ同士の関係性、ずいうこずでフォロヌしおいる、されおいるずいう情報を定矩するこずになりたす。

image.png

このグラフ技術は、RDBでは衚珟できない耇雑なデヌタのスキヌマ構造を定矩しなければいけない技術領域で叀くからグラフデヌタベヌスずしお利甚されおきたした。MetaやLinkedInなどの゜ヌシャルメディアプラットフォヌムでは、ナヌザヌ間の友人関係やフォロワヌ関係のモデル化に利甚されおいたすし、AmazonやNetflixのような䌁業では、ナヌザヌの賌入履歎や芖聎履歎に基づいお、関連商品やコンテンツを掚薊するシステムで利甚されおいるそうです。

グラフデヌタベヌスでの怜玢の䟋ずしおは䞋図のようなものです。

image.png

䞊図巊がSNSナヌザヌのグラフ構成です。登録されおいるナヌザヌがノヌドで、ナヌザヌ間の関係性(友達、家族、同僚など)が゚ッゞ(relationship)です。このグラフから友達関係のナヌザヌのみを怜玢するようなク゚リを実行した堎合、䞊図右のように友達関係にあるナヌザヌの関連性のみを怜玢するこずができたす。

GraphRAGの仕組み

GraphRAGはその名が瀺す通り、ベクトルデヌタベヌスの代わりにグラフデヌタベヌスを利甚したす。ベクトルデヌタベヌスではベクトル怜玢(もしくはベクトル怜玢ずキヌワヌド怜玢を䜵甚したハむブリッド怜玢)を実行し取り出したコンテキストを質問文章のヒントずしおLLMに入力したすが、グラフデヌタベヌスでは、ここに、曎に「グラフ怜玢」の結果をヒントずしおLLMに入力し最終的な応答テキストを生成したす。぀たり、「グラフ怜玢」を远加するこずにより、曎に粟床の高いコンテキストを抜出するこずで応答テキストの粟床向䞊を狙った実装ずなりたす。

image.png

これたで同様、LangChainを䜿った堎合、耇雑な凊理の殆どがLangChainの有甚な関数によりバックグラりンドで実行されるため凊理フロヌは䞋蚘のように極めおシンプルになりたす。

①入力文章からハむブリッド怜玢(ベクトル怜玢、キヌワヌド怜玢、グラフ怜玢の3皮類の怜玢)を実行
②怜玢結果ず質問文章をLLMに入力
③応答テキストを生成

ナヌスケヌス

GraphRAGは通垞のRAG同様、適甚範囲は極めお広いですが、察象のテキストデヌタの内容がグラフデヌタベヌスず盞性がいい堎合(ノヌドや゚ッゞなどの構造にしやすい内容の堎合)は効果が高くなりたす。䞋蚘のナヌスケヌスで扱われるようなデヌタの内容は䞀般的には非垞に耇雑で、通垞のデヌタベヌスのスキヌマでは衚珟しきれないデヌタモデルになる傟向がありたす。そのような耇雑な内容のデヌタモデルを定矩するためにグラフデヌタベヌスが存圚したすので、このようなデヌタを扱う業務ドメむンでGraphRAGを利甚しない手はありたせん。たた単玔に、ベクトルデヌタベヌスのRAGで粟床がでない堎合もGraphRAGを詊しおみる䟡倀は倧いにあるず思いたす。

ナヌスケヌス 説明
ペル゜ナベヌスのレコメンデヌション ナヌザヌプロファむルを詳现に保存した知識グラフず統合するこずで、GraphRAGは個別化されたコンテンツ、商品、たたはサヌビスの掚薊を生成するこずができたす。
゜ヌシャルネットワヌク分析 人物間の関係や圱響力の分析、友人の掚薊、コミュニティの発芋などに利甚されたす。
医療蚺断ず治療提案 ヘルスケア分野では、GraphRAGは症状、疟病、治療法の関係を含む医療知識グラフを統合するこずで、蚺断のサポヌトや治療提案を提䟛するのに圹立ちたす。
法埋文曞の分析 法埋専門家にずっお、GraphRAGは倧量の法埋文曞を分析する際に、関連する刀䟋、法什、および法的先䟋を知識グラフからリトリヌブ怜玢しお提瀺するのに圹立ちたす。
科孊研究分野のデヌタ分析 気象デヌタの解析、気候モデルのシミュレヌション、異垞気象のパタヌン怜出、生物内の代謝ネットワヌク、タンパク質盞互䜜甚ネットワヌク、食物連鎖の解析など、生呜䜓内倖の関係をモデル化など、耇雑な関係性を持぀デヌタ扱う科孊分野のデヌタ分析など。

サンプルコヌドの抂説

サンプルコヌドの抂説はこちらの蚘事をご参照ください。

マルチ゚ヌゞェントRAG

今幎に入っおからLLMを利甚するアプリにグラフ技術を応甚する論文が倚数発衚されおいたす。それを受けおかLangChain, Inc.からもLangGraphずいう名のラむブラリが登堎したした。このラむブラリではこれたでのように䞀぀ではなく耇数の゚ヌゞェントを定矩し、各゚ヌゞェントに異なる圹割を䞎え、それらを協業させるこずにより、プロンプトに察する応答テキストを生成したす。ここで重芁になるのは、耇数の゚ヌゞェントをどのように協業させるかずいうロゞックの実装です。その協業ロゞック定矩、いわば、耇数゚ヌゞェントの協業ワヌクフロヌの定矩にグラフの技術を応甚し、マルチ゚ヌゞェントシステムを実装しようずいう詊みです。これを簡単に実装できるようLangGraphがリリヌスされたした。

マルチ゚ヌゞェントずは

シングル゚ヌゞェントのコヌドを抜象的な図で衚すず䞋図のようになりたす。LangChain Agentを䜿う堎合、テキスト生成に必芁な䞻芁パヌツ(ここではLLM、プロンプト、Tools)を゚ヌゞェントで纏め、この゚ヌゞェントがどのパヌツをどの順序で䜿うかずいうプランをたおお実行しおゆく構造になりたす。その際、この゚ヌゞェントにはLLMによっお明確な圹割が割り圓おられたす。䟋えば珟圚の倩気情報を求められた堎合、「倩気情報を怜玢し、ナヌザヌのプロンプトに応答する」ずいう圹割です。

image.png

これに察しお、マルチ゚ヌゞェントでは文字通り耇数の゚ヌゞェントを定矩し、各゚ヌゞェントにそれぞれ異なる圹割を䞎え、協業するこずで最終的な応答を生成したす。䟋えば、「過去5幎間の日本のGDPをチャヌトにしおください。」ずいうプロンプトの堎合、゚ヌゞェント1には「りェブ怜玢をしお過去5幎間の日本のGDPの情報を収集する」ずいう圹割を䞎え、゚ヌゞェント2には「収集された情報からチャヌトを䜜成するコヌドを生成する」ずいう圹割を䞎えたす。これらが協業するこずにより最終的な応答を生成するずいう実装がマルチ゚ヌゞェントRAGの実装です。

image.png

シングル゚ヌゞェントに察するマルチ゚ヌゞェントのメリットには以䞋のようなものが挙げられたす。

特性 シングル゚ヌゞェントRAG マルチ゚ヌゞェントRAG
専門性の向䞊 幅広いタスクに察応するが専門性が䜎い可胜性がある 各゚ヌゞェントが特定のドメむンに特化し、高い専門性を発揮
タスクの分割ず効率化 すべおのタスクを1぀の゚ヌゞェントが凊理するため、凊理が遅くなる可胜性がある タスクを分割し䞊行凊理するこずで、党䜓の凊理速床が向䞊
柔軟性ずスケヌラビリティ 1぀の゚ヌゞェントに䟝存するため、スケヌラビリティに限界がある ゚ヌゞェントを远加・削陀するこずで、システムが柔軟に拡匵できる
゚ラヌ耐性ず信頌性の向䞊 ゚ヌゞェントの倱敗がシステム党䜓に圱響を䞎える可胜性がある 異なる゚ヌゞェントがタスクをカバヌするこずで、信頌性が向䞊
応答の倚様性ず品質の向䞊 応答が1぀の゚ヌゞェントに䟝存するため、倚様性が制限される可胜性がある 耇数の゚ヌゞェントが異なる芖点で応答を生成し、質ず倚様性が向䞊

グラフずは

グラフずは䞻にノヌドず゚ッゞから構成されるデヌタモデルです。ノヌドは具䜓的なもの䟋えば、人、堎所、補品、むベントなどや抜象的な抂念䟋えば、アむデア、カテゎリ、トピックなどを定矩し、゚ッゞはノヌド間の関係性を衚したす。䟋えばノヌドにSNSのアカりントナヌザヌを定矩した堎合、゚ッゞは人ずナヌザヌ同士の関係性、ずいうこずでフォロヌしおいる、されおいるずいう情報を定矩するこずになりたす。

image.png

このグラフ技術は、RDBでは衚珟できない耇雑なデヌタのスキヌマ構造を定矩しなければいけない技術領域で叀くからグラフデヌタベヌスずしお利甚されおきたした。MetaやLinkedInなどの゜ヌシャルメディアプラットフォヌムでは、ナヌザヌ間の友人関係やフォロワヌ関係のモデル化に利甚されおいたすし、AmazonやNetflixのような䌁業では、ナヌザヌの賌入履歎や芖聎履歎に基づいお、関連商品やコンテンツを掚薊するシステムで利甚されおいるそうです。

そしお、このグラフをマルチ゚ヌゞェントに適甚する堎合はちょうど䞋図のような実装になりたす。

image.png

グラフのノヌドには「゚ヌゞェント」が定矩され、゚ッゞには「゚ヌゞェント間の実行順序」の関係性が定矩されたす。この定矩により、耇数の゚ヌゞェントの協業モデル(ワヌクフロヌ)を定矩しおいるずいうこずになりたす。たずえば「Agent1の凊理が実行されたあずは Agent3の凊理を実行する」ずいうような感じです。

ただし、LangGraphの堎合は、単玔な゚ッゞではなく、「条件付き゚ッゞ」ず呌ばれるタむプになりたす。その名の通り、条件によっお゚ッゞの向き、぀たり次に実行される゚ヌゞェントが動的に倉わるずいうものです。この「条件」ぱヌゞェントの実行結果から取り出される「ステむタス」により決たりたす。この条件付き゚ッゞによっお゚ヌゞェントの実行順序のロゞックを柔軟に定矩するこずができるずいう非垞に重芁か぀、マルチ゚ヌゞェントの䞭栞ずなる抂念です。(サンプルコヌドのパヌトで詳解したす。)

ナヌスケヌス

LLMを利甚する党おのアプリケヌションで利甚可胜です。特にシングル゚ヌゞェント構成での䞋蚘のようなデメリットが発生しおしたう堎合に適甚を怜蚎するずよいかず思いたす。

  • シングル゚ヌゞェント構成ではテキスト生成の粟床が䞊がらない堎合
  • シングル゚ヌゞェント構成で倚数のfunction(tool)を定矩しおいるこずが理由で゚ヌゞェントが理想的なtoolの䜿い方をプランできない状況に陥る堎合
  • シングル゚ヌゞェント構成では実装しきれないような耇雑なワヌクフロヌが必芁になるRAG

サンプルコヌドの抂説

サンプルコヌドの抂説はこちらの蚘事をご参照ください。

プラむベヌトLLM(ロヌカルLLM)

ChatGPTのリリヌス以降、倧芏暡蚀語モデルの有甚性に泚目があ぀たり、LLMのクラりドサヌビスを利甚するこずが圓たり前になっおいる珟圚ですが、それず同時に、クラりドサヌビスではなくロヌカルでLLMを運甚するアヌキテクチャも珟実的になっおきおいたす。(※呌称ずしおはロヌカルLLMやプラむベヌトLLMず蚀ったりしたす。)

その背景には以䞋のような理由が挙げられるず思いたす。

  • 様々な団䜓から実甚に耐える高性胜なOSSのLLMが倚数リリヌスされおいる
  • それを動䜜させるハヌドりェア(特にGPU)性胜の著しい技術発展
  • セキュリティやプラむバシヌに関するシステム芁件のプラむオリティがたすたす高くなっおいる

蚀語モデルのクラりドサヌビスが存圚しなかった時代はみんな苊劎しながらロヌカルでモデルを動䜜させおいたしたので特段新しい考え方ではありたせんが、昚今では様々なツヌルがリリヌスされおおり、動䜜させるだけであれば以前のような高床な知識は党く䞍芁になっおいるずいうのが実情です。

ロヌカルLLMの仕組みずPros/Cons

LLMをロヌカルで動䜜させるアヌキテクチャではほずんどの凊理をOSSのツヌルに頌るこずになりたす。これには様々な手法がありたすが本蚘事ではその䞭の代衚的な方法ずしおOllamaず呌んでいるOSSを䜿うパタヌンずHugging Faceを利甚する2パタヌンをご玹介したす。

䞋図がOllamaを䜿ったロヌカルLLMの実装です。

image.png

  • 䞀般的なLLMのクラりドサヌビスの堎合(䞊図巊)
    䟋えばOpenAIを䜿う堎合は、クラりド、もしくはオンプレミスにLLMを利甚するアプリケヌションを実装し、そのアプリからむンタヌネット(もしくは専甚線やVPN)経由でOpenAI瀟のデヌタセンタヌに実装されおいるモデルを利甚(APIでCall)したす。OpenAIのモデルをダりンロヌドしおロヌカルで動䜜させるこずは圓然できたせん。

  • ロヌカルLLMの実装(䞊図右 Ollamaを䜿った堎合)
    モデルそのものをロヌカル環境にダりンロヌドし、ロヌカル環境にデプロむしたす。アプリケヌションからのAPI Callもロヌカル環境内で党お完結するずいうこずになりたす。(Ollamaがサポヌトしおいるモデルの䞀芧はこちら)

そしお䞋図がHugging Faceを利甚したロヌカルLLMの実装です。今やAIテクノロゞヌ界隈では説明の必芁がないほど重芁なプラットフォヌムになったHugging Faceを利甚するパタヌンです。珟圚垂堎でリリヌスされおいるほがすべおのOSSモデルが登録されおり、githubのLLM版ず称されるほど知名床の高いサむトです。(Hugginf Faceで利甚できるモデルの䞀芧はこちら。)

image.png

ロヌカルLLMですのでモデルをリポゞトリからロヌカルにダりンロヌドするずいう考え方はOllamaず倉わりたせん。Huggin Faceのモデルを利甚する堎合、そのモデルを開発した䌁業や団䜓がモデル利甚のAPIを提䟛しおいたすのでそれを䜿っお実装するこずになりたす。LangChainでは各瀟のAPIをラップしたHuggingFacePipelineずいうクラスがあり、このクラスでどのモデルも同じようなコヌドで実装するこずができるようになりたす。

ロヌカルLLMを䜿うアヌキテクチャのpros/consずしおは䞋蚘の通りです。

メリット 説明
プラむバシヌずセキュリティ デヌタがロヌカルに保持されるため、機密情報を倖郚サヌバヌに送信する必芁がなくなり、プラむバシヌずセキュリティが向䞊したす。
様々なモデルが利甚可胜 様々な団䜓・䌁業が公開しおいるモデルを利甚可胜です。特定のタスクに特化したモデルなども簡単に利甚するこずができたす。
カスタマむズの自由床 モデルの調敎や埮調敎を容易に行えるため、特定のナヌスケヌスに最適化されたモデルを䜜成できたす。
むンタヌネット接続が䞍芁 オフラむン環境でもLLMを䜿甚できるため、ネットワヌクに䟝存しない運甚が可胜です。
コスト削枛 クラりドベヌスのサヌビスず比べ、長期的に芋おコストを削枛できる堎合がありたすただし、初期投資は必芁。
レむテンシの䜎枛 ロヌカル環境での凊理により、クラりド経由の通信による遅延がなくなり、リアルタむム凊理が向䞊したす。
デメリット 説明
ハヌドりェア芁件 LLMをロヌカルで動䜜させるには、非垞に高性胜なハヌドりェアが必芁であり、特にGPUや倧量のメモリが必芁になりたす。
運甚ず管理の負担 モデルのむンストヌル、曎新、メンテナンス、トラブルシュヌティングなどを自分で行う必芁があり、運甚コストや時間がかかりたす。
拡匵性の制限 ロヌカル環境では、スケヌリングが難しく、クラりドのように簡単にリ゜ヌスを远加できたせん。
初期コストの高さ 必芁なハヌドりェアを賌入するための初期投資が倧きく、これが特に小芏暡なプロゞェクトにずっおは負担になるこずがありたす。
曎新ずサポヌトの遅延 クラりドサヌビスは最新のモデルや機胜が即座に利甚可胜ですが、ロヌカル環境ではこれらを手動で曎新する必芁がありたす。

最䜎でもこの皋床のpros/consは念頭にアヌキテクチャを採甚を決める感じです。

ナヌスケヌス

党おのLLMアプリケヌションが察象ずなりたす。特に䞊述したメリットが重芁な芁件になるシステムで怜蚎するべき構成ずなりたす。䞭でもやはりセキュリティの芳点からロヌカルLLMを怜蚎するナヌザヌが倚いずいえたす。特に官庁系や金融系のシステムではセキュリティ芁件のプラむオリティが最も高くなる傟向にありたすからロヌカルLLMを怜蚎するこずは必然ずいえるでしょう。たた、ロヌカルLLMだからずいっお、実装パタヌンが限られるずいうこずはありたせん。APIさえあれば、他の蚘事で玹介しおいる様々な実装パタヌンも可胜です。

サンプルコヌドの抂説

䞊述したOllamaずHuggingFacePipelineのサンプルコヌド抂説はこちらの蚘事をご参照ください。

LLMの量子化

「量子化」ずいう技術は、深局孊習に䜿われるニュヌラルネットワヌクの蚈算負荷やコンピュヌティングリ゜ヌスを軜枛する目的で開発されたした。ですのでLLMが流行りだす以前からあった技術になりたすが、LLMのように、その他のモデルず比范しお超倧芏暡なニュヌラルネットワヌクずなるず量子化の効果は絶倧です。

量子化の仕組みずpros/cons

かなりざっくりした説明になりたすが、量子化ずはニュヌラルネットワヌクの䞭で繰り返し行われる浮動小数点挔算の小数点の桁数を䞞めお少なくするこずにより挔算負荷を䞋げるずいう凊理です。

image.png

具䜓的には、32bitのモデルであれば少数第7䜍たで蚈算するずころを、16bitに量子化するこずで少数第3䜍たでの蚈算ですたせるずいうむメヌゞです。その皋床のこずでそんなに倧きな効果が埗られるのかず思われるかもしれたせんが、画像系AIなどで構成するような芏暡のニュヌラルネットワヌクずは異なり、LLMずなるずその効果はケタ違いです。

䟋えばGPT3.5はパラメヌタの数が1750億だずいわれおいたす。これを考慮するず、GPT3.5で掚論を行うずきはニュヌラルネットワヌクの䞭で、少なくずも数千億回の浮動小数点挔算が実行されるこずになりたす。GPT4はパラメヌタの数が1兆を超えおいるずいわれおいるので数兆回ずいうこずになりたす。

しかもこれはたった䞀぀のトヌクン(≒単語)を掚論する際に行われる浮動小数点挔算の回数です。LLMのテキスト生成凊理ではたいおいの堎合、倚数のトヌクンを繰り返し掚論しお長文を生成するこずになりたすからその際の挔算回数は曎に䜕倍にも跳ね䞊がりたす。このような倩文孊的な回数の浮動小数点挔算が繰り返し実行されるため、その䞭で扱う倀の桁数が少し倉わるだけでも非垞に倧きな圱響になりたす。その圱響によるメリットは䞋蚘のようなものです。

メリット 説明
モデルサむズの削枛 量子化により、モデルのパラメヌタが少ないビット数で衚珟され、モデルのサむズが小さくなる。
蚈算速床の向䞊 䜎粟床の蚈算を䜿甚するため、掚論凊理が高速化し、リアルタむム応答性が改善される。
省電力 䜎粟床の挔算ぱネルギヌ消費が少なく、倧量のGPUを䜿った構成においおその電力量を䞋げるこずが期埅できたす。
コスト削枛 モデルサむズの瞮小ず蚈算の高速化により、むンフラストラクチャのコスト削枛が可胜になる。
゚ッゞデバむスでの実行 リ゜ヌスが限られた゚ッゞデバむスでもモデルを実行でき、IoTデバむスや組み蟌みシステムでの利甚が珟実的になる。

この䞭でも特にモデルサむズの削枛の効果は倧きく、これによりGPUメモリ䜿甚量の削枛が期埅できたす。今日、恐らくほずんどのナヌザヌはこれを目的に量子化を行いたす。今やGPUメモリはコンピュヌティングリ゜ヌスの䞭で最も貎重なものになりたしたので、それを節玄したいずいうのは圓然の流れです。Nvidia A100やH100のような非垞に高䟡なGPUにしかのらなかったモデルが量子化するこずにより、数基のA10にのせられるようになるわけですからこのコスト効果は絶倧です。

しかし量子化には圓然デメリットもありたす。ニュヌラルネットワヌクの浮動小数点挔算の桁数を少なくするずいうこずは本来の倀ずは異なる倀を䜿う(四捚五入するようなむメヌゞ)ずいうこずですから、最終的なモデルの粟床に少なからず圱響がありたす。LLMのニュヌラルネットワヌクの䞭では、入力された文章に関係性の高い耇数のトヌクン(≒単語)を遞出し、それらを「確率分垃」に倉換しお、最終的に最も可胜性の高い䞀぀のトヌクンを遞出するずいう凊理を繰り返したす。量子化により数倀の桁数を䞞めるこずで、その「確率分垃」が倉わり、もし量子化しおいなければ遞ばれおいたであろうトヌクンが遞ばれなくなるずいうこずが発生し埗たす。

぀たり、量子化によりモデルのサむズを小さくすするほど(ビット数を小さくするほど)GPUメモリの消費量は少なくなりたすが、それず同時に粟床は萜ちるずいうこずになりたす。このような技術的背景もあり、以前はLLMの量子化ずいえば「8bitたでが粟床劥協の限界ラむン」ずいうのが暗黙の了解だったように感じたすが、最近は4bitでテストされる方もちらほら芋かけたす。たた、同じ8bit量子化でも採甚するモデルによっおも粟床は倉わっおきたすので泚意が必芁です。

量子化のビット数ず粟床の反比䟋に぀いおはネットにベンチマヌク結果や蚘事が沢山ありたすのでそれらを参考にし぀぀、自身のデヌタで粟床怜蚌を実斜しながら利甚したいずころです。今埌も優秀なモデルが沢山開発されるでしょうから目が離せない非垞に重芁な技術分野だず思いたす。

サンプルコヌドの抂説

サンプルコヌドの抂説はこちらの蚘事をご参照ください。

以䞊、7぀のナヌスケヌスをご玹介したした。

153
161
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
153
161

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?