この共有のテーマは、「OpenLLM を使用して大規模な言語モデル アプリケーションを迅速に構築および展開する」です。 OpenLLM は、オープンソースの Large Language Model (LLM) 開発フレームワークです。さまざまなオープンソース LLM モデルをサポートし、メモリ使用量を最適化するための 2 つの主要な LLM 最適化が組み込まれています。さらに、LangChain や BentoML との統合も良好で、大規模な言語モデルのアプリケーションを迅速に構築してデプロイできます。 1. BentoML 会社概要BentoML は機械学習インフラストラクチャの提供に重点を置いています。中核製品は、同社と同じ名前を持つオープンソースフレームワーク BentoML です。同社はサンフランシスコ・ベイエリアに本社を構えており、国内でリモート勤務する同僚も多数いる。当社は継続的な努力により、多くのお客様からの評価を獲得してきました。 2. OpenLLM製品の背景まず、OpenLLM の開発の背景についてお話しします。 1. LLMの発生まもなく過ぎ去る2023年が皆様にとって大変素晴らしい年となることを信じております。 ChatGPT は 2022 年 11 月にリリースされたばかりです。1 年後、私たちはさまざまな大規模言語モデルの出現を目撃しました。Claude や GPT などの商用の大規模言語モデルがあり、パラメータ数が数 B から数百 B に及ぶオープンソースの小規模モデルも多数あります。今は、新しい言語モデルが次々と登場し、大規模言語モデルの繁栄と発展の時代であると言えます。 BentoML は、一部の顧客とのやり取りの中で、開発中に OpenAI の機能を活用し、プロンプトにデータを入力してから推論結果をテストできる可能性があることを発見しました。モデルを本番環境にデプロイする場合、独自のサーバーまたはクラウド サーバーにデプロイする必要があります。 2. あなた自身のLLMほとんどの顧客は次のような要求を持っています:
3. 実稼働環境にLLMを導入する際の課題大規模な言語モデルを独自に展開する場合、次のような課題に直面する可能性があります。
3. OpenLLM の概要、アプリケーション例、利点1. OpenLLMの紹介以下では、当社のオープンソース製品 OpenLLM が上記の問題をどのように解決するかについて説明します。 2023 年 6 月にオープンソース化された OpenLLM は、大規模な言語モデルを展開するためのフレームワークです。現在、このプロジェクトは GitHub で 6,800 を超えるスターを獲得しています。当初のスローガンは、1 行のコードまたは比較的簡単な操作で、さまざまな大規模な言語モデルを切り替えることにより、個々のユーザーに利便性を提供することでした。さまざまなモデルを試してみたい個人ユーザーでも、独自の AI アプリケーションを展開したいユーザーでも、OpenLLM は便利なソリューションを提供できます。 OpenLLM は現在、一般的に使用されているほぼすべてのオープンソースの大規模言語モデルをサポートしています。各モデルに対して、フレームワークは複数の異なるパラメータ量と異なるデプロイメント モデル ID を提供し、その中から選択できます。現在、ChatGLM、Baichuan、Dolly-V2などのモデルが含まれています。 2. OpenLLMのアプリケーション例次に、OpenLLM が大規模な言語モデル アプリケーションの開発と展開をどのように加速できるかを説明します。 まず、LLM サービスを開始します。 LLM サービスの開始は非常に簡単です。LLM ツールをインストールした後、次のコマンドを実行するだけでアプリケーションが起動します: "start dolly-v2"。モデルがコンピューターにまだダウンロードされていない場合は、自動的にダウンロードされます。これには少し時間がかかる場合がありますが、アプリを起動すると、「地球の重さはどれくらいですか?」などの質問をして、コマンド ラインから直接サービスと対話できるようになります。 Dolly-V2 モデルを使用し、答えが得られました。このモデルは比較的弱いため、回答があまり正確でない可能性があります。 別のモデルである LlaMA を使用して、精度を向上できるかどうかを確認します。ここでは、LlaMA2 モデルを使用することを選択しますが、LlaMA2 は LlaMA のデフォルト モデルではないため、モデル ID を指定する必要があります。以前と同じように、モデルを切り替えるだけで、使い方はまったく同じです。 したがって、当社のフレームワークを使用すると、ユーザーはさまざまなモデルを簡単に切り替えることができます。使用方法は同じですが、モデルによって回答が異なる場合があります。今回はLlaMA2モデルが使用され、与えられた答えが比較的正確であることがわかります。 サービスと対話するためにコマンドラインを使用します。これはテスト段階では非常に便利で実用的です。ただし、実際にアプリケーションをデプロイするときには、フロントエンドまたは外部システムが呼び出せるように、アプリケーションで HTTP または gRPC インターフェースを提供することが必要になる場合があります。 OpenLLM フレームワークは、すぐに使用できる組み込み HTTP API をサポートします。サービスのホームページには、サービスでサポートされているすべての HTTP エンドポイントを一覧表示する Swagger ページが表示されます。先ほどコマンドラインで示したように、プロンプトに入力して JSON 形式の応答本文を取得し、ここで直接サービスを操作してテストすることもできます。 HTTPインターフェースを公開しているので、Python、Node、 カール HTTP にアクセスできるクライアントであれば、このインターフェースを呼び出すことができます。これにより、アプリケーションの柔軟性とアクセシビリティのオプションがさらに広がります。 また、ユーザーが Python コードで直接サービスと対話できるようにする Python SDK も提供しています。クライアントをインポートし、サービスのアドレスを指定するだけで、サービスに直接質問することができ、正しい回答が得られます。これにより、Python 環境で OpenLLM サービスを簡単に統合して使用できるようになります。 3. OpenLLMを使用する利点OpenLLM を使用すると、次の利点があります。
次に、優れた最適化を実現する VLM バックエンドを使用するため、継続的なバッチ処理に焦点を当てます。 大規模言語モデルの推論では、入力の強度は均等ではなく、結果がより速く生成されるものもあれば、より長い時間がかかるものもあります。最適化を行わない場合、入力の 1 つ (S2 など) が最初に推論を完了すると、プロセス全体は他の入力が完了するまで待機してから次のラウンドに進みます。これにより、推論タスクが実行されない期間があるため、GPU 時間が無駄になります。 連続バッチ処理の最適化により、1 つの推論タスクが終了した直後に次の推論タスクを導入できます。例を挙げて説明すると、まず S3 が推論を完了し、次に S5 がすぐに参加し、次に S1 が推論を完了し、次に S6 がすぐに参加するとします。これにより、各タイムスライスでモデル推論タスクが実行され、GPU リソースの使用率が最大化されます。これは、アイドル時間を短縮し、全体的な推論効率を向上させる効果的な最適化戦略です。 時間の最適化を紹介した後、スペースの最適化、特に KVcache の最適化について見てみましょう。まず、大規模言語モデルがどのように機能するかを簡単に紹介します。これは Transformer フレームワークに基づいています。このモデルは、一連の入力トークンを通じて次のトークンの最大確率を返します。ただし、入力には繰り返し計算が含まれる場合があり、たとえば「I am a」と入力するとモデルは「I am a cat」を返し、「I am a cat」と入力すると「I am a cat」を返すため、Transformer フレームワークで多くの繰り返し計算が発生します。この問題を解決するために、KVcache を使用して計算結果をキャッシュします。 KVcache は、コンピュータのメモリを割り当てるときに、割り当てる必要があるメモリの量を正確に知ることができないという新たな問題をもたらします。まずは大まかな範囲を見積もることしかできません。図から、タスクが完了すると、次のタスクの追加により、解放できたはずのメモリが十分に活用されない可能性があることがわかります。これにより、多くのメモリフラグメントが生成され、メモリの使用効率に影響します。 この問題を最適化するために、Paged Attention が導入されました。 Paged Attention の最適化の考え方は、すべてのメモリをブロックに分割し、ブロックごとにメモリを割り当てることです。タスクが完了し、メモリが不足しており、さらにメモリが必要であることが判明した場合、フレームワークは別の場所に別のブロックを割り当てます (連続していない可能性があります)。タスクが完了すると、ブロックは次のタスクで使用するために解放されます。このようにして、メモリの断片化を効果的に削減できます。メモリは連続していないため、メモリの物理的な場所と実際のシリアル番号とのマッピング関係を格納するためのブロック テーブルが必要であり、その結果、大規模モデルでは論理的に連続したメモリが取得されるように見えることに注意してください。 4. BentoML の紹介と応用例1. BentoMLの紹介上記の最適化を完了したら、大規模言語モデルのデプロイを開始します。しかし、ほとんどの AI アプリケーションは、単にモデルを展開する以上のことを必要とします。そうでなければ、どの企業も OpenAI と競争することはできません。したがって、モデル推論に加えて、私たちの AI アプリケーションには、作業の他の多くの側面も含まれる可能性があります。たとえば、データの収集方法、データの検証方法、デプロイメント メトリックの構成方法、サービス メトリックの観察を含むモデル推論の実行方法などを考慮する必要があります。これらの問題は研究段階では考慮する必要がないかもしれませんが、展開とエンジニアリングの後には、これらのさまざまな問題を考慮する必要があります。 BentoML と OpenLLM の統合には多くの利点があります。 BentoML は、次のような導入後の課題の解決に重点を置いたオープンソースの AI 導入フレームワークです。
BentoML モデルは、機械学習モデルの抽象化です。機械学習の分野にはさまざまなフレームワークがあり、それぞれに独自のモデルの概念があります。 BentoML では、これらのさまざまなフレームワークのモデルを BentoML モデルとしてインポートできます。この抽象的なデザインにはいくつかの利点があります。
BentoML のランナーには次の機能があります。
上の図は、BentoML API サーバーのワークフローを示しています。アプリケーションは外部から HTTP リクエストを受信します。これは、POST メソッドを介して送信される JSON データである可能性があります。受信した HTTP リクエスト データは、モデルが受け入れ可能な形式に変換するために前処理する必要がある場合があります。このステップには通常、入力データがモデルの要件を満たしていることを確認するためのデータ形式の変換や検証などの操作が含まれます。 IO 記述子は、入力データと出力データの構造とタイプを定義し、データ形式変換のブリッジとして機能します。 IO 記述子による変換後、データは推論のためにモデルに渡されます。モデルは入力データを使用して、対応する予測または出力を生成します。モデルの出力を HTTP 応答の形式に変換するために、後処理が必要になる場合があります。このステップには、Tensor または Numpy 配列を JSON 形式に変換することなどが含まれます。処理されたデータは HTTP 応答の形式で要求者に返され、推論プロセス全体が完了します。これは、アプリケーションが外部システムと通信するための出口ポイントです。 BentoML のリクエスト処理プロセスは、複数の層の負荷分散、API サーバー、ランナーを通過します。
ここでは、BentoML の Bento の概念を紹介します。Bento は、機械学習の依存関係、環境 Dockerfile、ソース コード、必要なモデル、その他のデプロイメント構成を含む、パッケージ化された最小のデプロイメント ユニットです。 2. BentoMLアプリケーションの例次に、例を使用して、BentoML を使用して AI アプリケーションを開発およびデプロイする方法を説明します。 LangChainとOpenLLMを使用して広告コピー生成機能を実装するアプリケーションを作成し、LangChainとOpenLLMの統合を実証します。次に、BentoML を使用して HTTP サービスを開始し、1 行のコードで LLM モデルを切り替え、最後に Bento パッケージを生成して、その後のデプロイメントで BentoML を使用する方法を示します。 前のコードでは、いくつかの LangChain モジュールをインポートしました。 LangChain に精通している場合は、これらのモジュールについてある程度理解しているはずなので、ここでは詳しく説明しません。次は BentoML の部分です。 BentoML は主に、入力と出力のタイプを記述するために使用されるいくつかの IO 記述子をインポートします。ここでは、JSON と Text の 2 つのタイプをインポートしました。入力は JSON 形式で、出力はテキストになる必要があるため、インポートされたモジュールと記述子を使用します。 次に、pydantic のモデルを使用して、入力の有効性を検証するために使用される構造を定義します。このクエリ オブジェクトには、次のパラメーターが含まれています: industry は業界を表し、productName は製品名を表し、keywords は必要なキーワードを表します。これらのパラメータは、広告ワードを生成するために必要な入力です。 2 番目の部分は、モデル ID をすばやく切り替えるためのヘルパー関数です。この関数は LangChain オブジェクトを返します。したがって、最初に opt モデルを使用します。上の行をコメントアウトして下の行を使用すると、Baichuan モデルの使用に直接切り替えることができます。 これはプロンプト生成部分です。LangChain 関数を使用してプロンプト テンプレートを指定し、このテンプレートに入力したパラメータを入力して完全なプロンプトを生成します。 次のステップは、公開するインターフェースを定義することです。入力と出力のタイプを指定することにより、この関数はサービスへのインターフェースとして使用されます。 48 行目では、サービスを開始するときに、分散環境でどのランナーをリモートで開始する必要があるかを知る必要があるため、LLM ランナーがサービスに渡されます。したがって、ここでの起動では、2 つの独立したサービスが生成されます。1 つは API インターフェース レイヤー (`Service`) で、もう 1 つは LLM ランナーです。それらは互いに独立しています。 起動すると、前のページと同様の Swagger ページが表示され、そのページで直接テストすることができます。ここでは、業種を「SAAS」、製品名を「BentoML」に設定しました。実行すると、広告スローガンが生成されます。この広告スローガンは私たちのニーズを満たしており、ツイートや WeChat のコンテンツのように見えます。不動産業界の広告を生成したい場合は、業界を「不動産」に切り替えるだけで、家の絵文字も含まれた、不動産業界らしい広告が作成されます。 開発とローカルテストが完了したら、コードとモデル全体を Bento にパッケージ化します。 BentoML の Build コマンドを使用すると、Bento パッケージを簡単に作成できます。生産が完了したら、その後にオプションの 2 つの手順があります。 1 つ目は、コンテナ化してイメージにパッケージ化し、その後の展開に備えることです。 2 番目のオプションは、この Bento を当社のクラウド プラットフォームに直接プッシュすることです。クラウド プラットフォームは、その後の展開操作を自動的に実行するのに役立ちます。 クラウド プラットフォームは、Bento を展開できるプラットフォームです。 Bento を Kubernetes 上で実行されるコンテナに自動的に変換し、その上で実行します。ここでの例には、API サーバーと、LLM ランナーや Text2Image ランナーなどの複数の異なるランナーが含まれています。また、BentoCloud では、容量の拡張方法を指定することができます。API ごとに拡張が必要なノードの数を個別に指定したり、ランナーごとに必要な GPU やインスタンスの数を指定したりすることができます。 5. OpenLLMの概要OpenLLM は、オープンソースの Large Language Model (LLM) 開発フレームワークです。さまざまなオープンソース LLM モデルをサポートし、メモリ使用量を最適化するための 2 つの主要な LLM 最適化が組み込まれています。さらに、LangChain と BentoML の両方との統合も良好です。 |
>>: 人工知能は人間と同じくらい創造的になれるのでしょうか?
米国のスティーブンス工科大学は、ユーザーが使用するパスワードを4分の1の精度で適切に推測できる、いわ...
LoGANがデザインしたいくつかのロゴ画像提供: マーストリヒト大学[51CTO.com クイック翻...
舒城県裁判所杭埠法廷は最近、建設工事契約紛争事件の審理に法廷音声認識システムを使用した。これは、杭埠...
[[431567]]長い間、テスト セットで優れたパフォーマンスを発揮するモデルは、一般化のパフォー...
著者注:機械学習モデルがいつ、どのように、なぜ失敗するかを分析することを「エラー分析」と呼びます。科...
業界の専門家は、テクノロジー企業がAIへの投資を優先し、採用を急ぐため、他の分野での人員削減は202...
日常的なタスクの自動化は、現在多くの業界で関心を集めているコンセプトです。最も革命的なのは自動運転車...
Microsoft Azure と研究チームは協力して、コードネーム「Singularity」という...
AIへの追加投資は2030年までに雇用の5%に貢献し、創出される追加の富は労働需要を促進し、雇用を...
著者についてCtrip の自然言語処理と大規模言語モデル アルゴリズムの専門家である Terry は...
[[257915]]編集者注:自動運転車が私たちの信頼を得られるのはいつでしょうか? 「十分に安全...
急速に進化するあらゆるトピックと同様に、学ぶべき新しいことが常に存在し、機械学習も例外ではありません...