AIエージェントは今話題になっています。OpenAIの応用研究ディレクターであるLilian Weng氏が書いた10,000語の記事[1]では、エージェント = LLM + メモリ + 計画スキル + ツールの使用が提案されています。 図1 LLMを利用した自律エージェントシステムの概要 簡単に言えば、エージェントは LLM の強力な言語理解機能と論理的推論機能を使用して、人間がタスクを完了するのに役立つツールを呼び出します。ただし、課題もいくつかあります。たとえば、基本モデルの能力によって、ツールを呼び出すエージェントの効率が決まりますが、基本モデル自体には、大規模なモデルの幻覚などの問題があります。 この記事では、「コマンドを入力して複雑なタスク分割と関数呼び出しを自動的に実現する」というシナリオを例に、基本的なエージェントプロセスを構築し、「基本モデルの選択」と「プロンプトの設計」を通じて「タスク分割」と「関数呼び出し」のモジュールを正常に構築する方法を説明することに重点を置いています。 プロジェクトアドレス: https://sota.jiqizhixin.com/project/smart_agent GitHub リポジトリ: https://github.com/zzlgreat/smart_agent タスク分割と関数呼び出しエージェントプロセス「コマンドを入力すると、複雑なタスクが自動的に分割され、関数が呼び出される」ことを実現するために、プロジェクトで構築されたエージェント プロセスは次のとおりです。
図 1. ReWOO: 効率的な拡張言語モデルのための推論と観察の分離 上記のプロセスを実装するために、プロジェクトでは、「タスク分割」モジュールと「関数呼び出し」モジュールにそれぞれ 2 つの微調整モデルを設計し、複雑なタスクを分割し、オンデマンドでカスタム関数を呼び出す機能を実現しました。帰納的要約モデルのソルバーは、分割タスク モデルと同じにすることができます。 タスク分割と関数呼び出しモデルを微調整する2.1 微調整の経験のまとめ「タスク分割」モジュールでは、大規模なモデルに複雑なタスクを単純なタスクに分解する機能が必要です。 「タスク分割」の成功は、主に次の 2 つの点に依存します。
同時に、与えられたプロンプト テンプレートの下でのタスク分割モデルの出力形式は、可能な限り比較的固定されることを期待しますが、過剰適合してモデルの本来の推論機能と一般化機能を失わないようにする必要があります。ここでは、lora を使用して qv レイヤーを微調整し、元のモデルへの構造的変更を可能な限り小さくします。 「関数呼び出し」モジュールでは、大規模なモデルは、処理タスクの要件を満たすためにツールを安定して呼び出す機能を備えている必要があります。
さらに、計算能力の使用量の観点から、lora/qlora ファインチューニングは、低い計算能力の条件下での大規模言語モデルのファインチューニングと推論を実現するために使用され、定量的展開は推論のしきい値をさらに下げるために使用されます。 2.2 基本的なモデルの選択「タスク分割」モデルを選択する際には、そのモデルが強力な一般化能力と一定の思考連鎖能力の両方を備えていることを期待します。 HuggingFace の Open LLM リーダーボードを参照してモデルを選択し、テキスト モデルのマルチタスク精度を測定するテスト MMLU と総合スコアの平均に重点を置くことができます。 図 2 HuggingFace Open LLM リーダーボード (0921) このプロジェクトに選択されたタスク分割モデルは次のとおりです。
「関数呼び出し」モデルの選択に関しては、メタオープンソースLlama2コードプログラミングモデルCodeLlamaの元のトレーニングデータには大量のコードデータが含まれているため、カスタムスクリプトのQloraを微調整してみることができます。関数呼び出しモデルには、CodeLlama モデル (34b/13b/7b) をベースとして選択します。 このプロジェクトに選択された関数呼び出しモデルは次のとおりです。
「関数呼び出し」モデルを微調整するために、プロジェクトではプロンプト損失マスクを使用して QLORA トレーニングを実行し、モデル出力を安定させます。損失関数は次のように調整されます。
2.3 ハードウェア要件:
2.4 プロンプト形式の設計タスク分割には、大規模言語モデルの効率的な推論のためのフレームワークであるReWOO(Reasoning WithOut Observation)[2]のプランナーによって設計されたプロンプト形式を採用しました。ここでは、「Wikipedia[input]」などの関数を関数と説明に置き換えるだけです。プロンプトの例は次のとおりです。 関数呼び出しについては、Qloraの微調整は後で行われるため、huggingface [3]のオープンソース関数呼び出しデータセットのプロンプトスタイルをそのまま採用します。以下を参照してください。 指示データセットの準備3.1 データソース
3.2 データセットの形式
ここでは、Trelis データセットの形式を使用します。データセットは 55 行のみで、それほど大きくありません。構造は実際にはアルパカ形式です。これは、systemPrompt、userPrompt、assistantResponse に分かれており、それぞれアルパカの Instruction、prompt、Response に対応します。次に例を示します。 図3. オープンソースデータセットを呼び出すHuggingFace関数の例 微調整プロセスの説明4.1 環境の微調整Ubuntu 22.04 システム、cuda 11.8、Pytorch 2.0.1、LLaMA-Efficient-Tuning フレームワークを使用。ディープスピード 0.10.4 4.2 微調整の手順1) Marcoroni-70BのLora微調整
すべての選択が完了したら、次の内容の新しいトレーニング bash スクリプトを作成します。 このような設定では最大 240G のピーク メモリが必要になりますが、それでも 6 枚の 4090 カードをトレーニングに使用できるようになります。 deepspeed はモデルを初期化する必要があるため、最初は時間がかかる場合があります。そしてトレーニングが始まりました。 図4 6カード4090トレーニング帯域幅速度 合計時間は8時間56分でした。このトレーニングでは、マザーボード上の NVME スロットが OCULINK と PCIE4.0 x16 帯域幅を共有します。したがって、6 つのイメージのうち 2 つは PCIE4.0 X4 で実行されています。上の図から、RX と TX の両方が PCIE4.0 X4 の帯域幅速度のみであることがわかります。これは、今回のトレーニングにおける最大のコミュニケーションのボトルネックにもなりました。すべてのカードが PCIE 4.0 x16 で動作していれば、速度は現在よりもはるかに速くなります。 図5. LLaMA-Efficient-Tuningによって生成された損失曲線 上記は、LLaMA-Efficient-Tuning によって自動生成された損失曲線です。4 エポック後も収束効果が良好であることがわかります。 2) Codellama 向けの Qlora の微調整 トレーナー クラスは、上記のプロンプト損失マスク メソッドに従ってリファクタリングされました (プロジェクト コード リポジトリの func_caller_train.py を参照)。データセット自体が比較的小さい(55 行)ためです。したがって、4 エポックを実行するのに 2 分しかかからず、モデルはすぐに収束に達しました。 4.3 微調整後のテスト結果プロジェクト リポジトリには、短い実用的なツールキットの例が提供されています。機能には以下が含まれます。
現在、70B モデルと 34B モデルがあります。実際の使用では、6 つの 4090 を使用して、これら 2 つのモデルを同時に bf16 精度で実行することは現実的ではありません。ただし、量子化によってモデルのサイズを圧縮し、モデルの推論速度を向上させることができます。ここでは、高性能 LLM 推論ライブラリ exllamav2 を使用して、flash_attention 機能を使用してモデルを量子化および推論します。著者はプロジェクトページで独自の定量化方法を紹介していますが、この記事では詳しく説明しません。変換メカニズムによれば、70b モデルは 2.5 ビットに従って 22G のサイズに量子化できるため、グラフィック カードで簡単に読み込むことができます。 1) 試験方法 トレーニング セットに含まれていない複雑なタスクの説明が与えられた場合、トレーニング セットに含まれていない関数と対応する説明をツールキットに追加します。プランナーがタスクの分割を完了できれば、ディストリビューターは関数を呼び出すことができ、ソルバーはプロセス全体に基づいて結果を要約できます。 2) テスト結果 タスク分割: まず、図に示すように、text-generation-webui を使用して、タスク分割モデルの効果をすばやくテストします。 図6 タスク分割テストの結果 ここでは、エージェント テスト環境での呼び出しを容易にするためのシンプルな restful_api インターフェイスを記述できます (プロジェクト コード fllama_api.py を参照)。 関数呼び出し: プロジェクトには、シンプルなプランナー、ディストリビューター、ワーカー、ソルバーのロジックが記述されています。次に、このタスクをテストしてみましょう。コマンドを入力してください: 「Killers of the Flower Moon」の監督はどの映画を監督しましたか?そのうちの1つをリストし、bilibiliで検索します。 「bilibili を検索」機能は、プロジェクトの関数呼び出しトレーニング セットに含まれていません。同時に、このムービーはまだ公開されていない新しいムービーであり、モデル自体のトレーニングデータが含まれているかどうかは定かではありません。モデルが入力命令を非常にうまく分割していることがわかります。
同時に関数を呼び出すと、次の結果が得られました。クリック結果は Goodfellas で、映画の監督と一致しました。 要約するこのプロジェクトでは、「コマンドを入力して複雑なタスクを自動的に分割し、関数を呼び出す」というシナリオを例に、ツールキット-計画-分散-ワーカー-ソルバーという基本的なエージェントプロセスを設計し、1 つのステップでは完了できない主要な複雑なタスクを実行できるエージェントを実装します。基本モデルを選択し、Lora を微調整することで、低い計算能力の条件下でも大規模モデルの微調整と推論を完了できます。そして、推論の閾値をさらに下げるために定量的な展開アプローチを採用します。最後に、このパイプラインを通じて映画監督の他の作品を検索する例が実装され、基本的な複雑なタスクが完了しました。 制限事項: この記事では、検索と基本操作のツールキットに基づいて関数呼び出しとタスク分割のみを設計します。使用されるツールセットは非常にシンプルで、あまり設計されていません。フォールト トレランス メカニズムについてはあまり考慮されていません。このプロジェクトを通じて、RPA の適用を継続的に検討し、エージェント プロセスをさらに改善し、より高度なインテリジェント自動化を実現して、プロセスの管理性を向上させることもできます。 |
<<: ChatGPT Plus の一部加入者は、他のユーザーを無料トライアルに招待できますが、招待できるのは 1 回のみです。
>>: 彼らはAIを使って時の塵を拭い去り、半世紀前のアジア競技大会で中国が初めて金メダルを獲得した時の記憶を再現した。
Sitechi は、通信業界に特化したソフトウェア開発およびサービス プロバイダーです。業界で最も早...
[[245580]] 2018年9月26日、海底撈国際ホールディングス株式会社(06862.HK)が...
この段階では、AI エージェントは万能であるように見え、ゲームをプレイしたり、人間を模倣してさまざま...
現在、AI分野で画期的な進歩を遂げているディープラーニングモデルの規模が大きくなるほど、エネルギー消...
最新の顔認識の脆弱性が明らかになり、テストされたすべての Android スマートフォンが脆弱である...
今日の自動運転車の技術は、ナビゲーションに極めて詳細な 3D マップに大きく依存していますが、そのほ...
私たちは、企業や専門家が IoT についてどう考えているかを知りたいと思っていますが、一般の人々はど...
科学の分野では、人類の科学技術の発展のスピードは実に速く、人工知能と比較すると、すでに基本的に活用で...
2019 年、OpenAI は、特定の「安全制約」に準拠した AI モデルを開発するためのツール ...
AIベースの機密情報検出サービスプロバイダーであるText IQのCEO、Apoorv Agarwa...
ビッグデータと高性能コンピューティング リソースにアクセスすることで、企業は新しい人工知能ツールと機...