EasyLLM: 言語モデルの処理を簡素化し、OpenAI クライアントと Hugging Face クライアント間のシームレスな切り替えを実現します。

序文

この 1 年足らずの短期間で、国内外で出現した大規模言語モデル (LLM) は満開と言え、オープンソース、クローズドを問わず、非常に優れたモデルがいくつか登場しています。ただし、アプリケーション開発に LLM を使用する場合、デプロイからトレーニング、微調整、API インターフェイス開発、プロンプトのワード形式などに至るまで、各モデルに多かれ少なかれ違いがあることがわかります。あまり使いにくく、メンテナンスも簡単ではありません。

まず、LLM の使用と展開のプロセスは比較的複雑です。LLM プロバイダーやフレームワークごとに違いがあるため、ユーザーにとっては面倒な構成と適応作業が必要になります。たとえば、OpenAI の Completion API、ChatCompletion、Completion、Embedding の使用と、Hugging Face を使用する対応する機能の間に互換性がない可能性があり、ユーザーはコードを手動で変更して異なるモデルに適応させる必要があります。

次に、LLM のプロンプト形式にも問題があります。LLM ごとに異なるプロンプト形式が使用される場合があるため、異なるモデル間で切り替えるときに形式の変換が必要になります。これにより、ユーザーには追加の作業負荷と学習コストがかかります。

さらに、LLM の応答時間も考慮事項となります。一部のシナリオ、特にリアルタイムの対話が必要なシナリオでは、LLM 全体が結果の生成を完了するまで待機すると、遅延や不便が生じる可能性があります。

上記の問題を解決するために、これらの問題を簡単に解決できるEasyLLMが登場しました。

1. EasyLLM の概要

EasyLLM は、LLM を扱うプロセスの簡素化と改善を目的としたオープンソース プロジェクトです。これは、ユーザーが 1 行のコードを変更するだけで、異なる LLM を簡単に切り替えることができる互換性のあるクライアントを提供します。さらに、EasyLLM は、ユーザーが異なる LLM 形式間の変換を支援するプロンプト アシスタントも提供します。さらに、EasyLLM はストリーミングをサポートしているため、ユーザーは応答全体を待たずに、部分的に生成された結果をすぐに取得できます。

EasyLLM の最初のバージョンは、OpenAI の Completion API と互換性のあるクライアントを実装します。つまりopenai.ChatCompletionopenai.Completion、 、openai.Embeddingを 、huggingface.ChatCompletionhuggingface.Completionまたはに簡単に置き換えることができますhuggingface.Embeddingコードを 1 行変更するだけで置き換えることができます。

EasyLLM を通じて、さまざまな LLM モデルをより便利に使用および適用できるようになり、作業効率と柔軟性が向上します。次に、EasyLLM の主な特徴と機能、および EasyLLM がどのようにしてより良い LLM エクスペリエンスをもたらすのかを詳しく見ていきましょう。

2. EasyLLMの特徴

以下は現在の機能のリストです

  • 互換性のあるクライアント - OpenAI の API、 ChatCompletion、および とCompletion互換性のあるクライアントを実装しますEmbeddingコードを 1 行変更するだけで、異なる LLM を簡単に切り替えることができます。

  • プロンプト ヘルパー - 異なる LLM 形式間でプロンプトを変換するのに役立つユーティリティ。たとえば、OpenAI メッセージ形式から LLaMA などのモデルのヒントに進みます。

  • ストリーミング サポート - 応答全体を待つのではなく、LLM から完了結果をストリーミングします。チャットインターフェイスなどに最適です。

これまでの計画:

  • evol_instruct(進行中) - LLM を使用して命令を作成する方法であり、単純な命令を複雑な命令に進化させることができます。

  • prompt_utils- ヘルパー メソッドは、OpenAI メッセージなどのヒント形式と、Llama 2 などのオープン ソース モデルからのヒントとの間で簡単に変換できます。

  • sagemakerクライアントは、Amazon SageMaker にデプロイされた LLM と簡単に対話できます

3. EasyLLMの使用を開始する

pip 経由で EasyLLM をインストールします。

pip install easyllm

次に、クライアントをインポートして使用を開始します。

from easyllm.clients import huggingface

# D定义要使用的提示
huggingface.prompt_builder = "llama2"
# huggingface.api_key="hf_xxx" # change api key if needed

response = huggingface.ChatCompletion.create(
    model="meta-llama/Llama-2-70b-chat-hf",
    messages=[
        {"role": "system", "content": "\nYou are a helpful assistant speaking like a pirate. argh!"},
        {"role": "user", "content": "What is the sun?"},
    ],
      temperature=0.9,
      top_p=0.6,
      max_tokens=256,
)

print(response)

出力結果:

{
  "id": "hf-lVC2iTMkFJ",
  "object": "chat.completion",
  "created": 1690661144,
  "model": "meta-llama/Llama-2-70b-chat-hf",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": " Arrrr, the sun be a big ol' ball o' fire in the sky, me hearty! It be the source o' light and warmth for our fair planet, and it be a mighty powerful force, savvy? Without the sun, we'd be sailin' through the darkness, lost and cold, so let's give a hearty \"Yarrr!\" for the sun, me hearties! Arrrr!"
      },
      "finish_reason": null
    }
  ],
  "usage": {
    "prompt_tokens": 111,
    "completion_tokens": 299,
    "total_tokens": 410
  }
}

その他の例と詳細な使用手順については、ドキュメントを参照してくださいコードはGitHubにあります。

4. EasyLLMクライアント

EasyLLM のコンテキストでは、「クライアント」とは、特定の LLM API (OpenAI など) と対話するコードを指します。現在サポートされているクライアントは次のとおりです。

  • ChatCompletion- ChatCompletion は、OpenAI ChatCompletion API と互換性のある LLM と対話するために使用されます。

  • Completion- OpenAI Completion API 互換の LLM と対話するため。

  • Embedding- OpenAI Embedding API 互換の LLM と対話するため。

5. ハグフェイスクライアントに対応

EasyLLM は、HuggingFace モデルとインターフェイスするクライアントを提供します。クライアントは、 HuggingFace Inference API、 Hugging Face Inference エンドポイント、またはテキスト生成推論または互換性のある API エンドポイントを実行する Web サービスと互換性があります。

  • huggingface.ChatCompletion- OpenAI ChatCompletion API と互換性のある HuggingFace モデルと対話するためのクライアント。

  • huggingface.Completion- OpenAI Completion APIと互換性のあるHuggingFaceモデルとインターフェースするためのクライアント。

  • huggingface.Embedding- OpenAI Embedding API 互換の HuggingFace モデルとインターフェイスするためのクライアント。

5.1、ハグフェイス.チャット完了

このhuggingface.ChatCompletionクライアントは、OpenAI ChatCompletion API と互換性のあるテキスト生成推論で実行される HuggingFace モデルと対話するために使用されます。

from easyllm.clients import huggingface

# hubbingface模块会自动从环境变量HUGGINGFACE_TOKEN或HuggingFace CLI配置文件中加载HuggingFace API密钥。
# huggingface.api_key="hf_xxx"
hubbingface.prompt_builder = "llama2"

response = huggingface.ChatCompletion.create(
    model="meta-llama/Llama-2-70b-chat-hf",
    messages=[
        {"role": "system", "content": "\nYou are a helpful, respectful and honest assistant."},
        {"role": "user", "content": "Knock knock."},
    ],
    temperature=0.9,
    top_p=0.6,
    max_tokens=1024,
)

サポートされているパラメータは次のとおりです。

  • model- 最終結果を生成するために使用されるモデル。指定しない場合は、デフォルトでベース URL が使用されます。

  • messages-List[ChatMessage]完了結果を生成するためのチャット メッセージのリスト。

  • temperature- 完成結果を生成するために使用される温度パラメータ。デフォルトは 0.9 です。

  • top_p- 完了結果の生成に使用される top_p パラメータ。デフォルトは 0.6 です。

  • top_k- 完了結果を生成するための top_k パラメータ。デフォルトは 10 です。

  • n- 生成する完了した結果の数。デフォルトは 1 です。

  • max_tokens- 生成するトークンの最大数。デフォルトは 1024 です。

  • stop- 終了結果を生成するための停止シーケンス。デフォルトは「なし」です。

  • stream- 完了結果をストリーミングするかどうか。デフォルトは False です。

  • frequency_penalty- 補完を生成するための頻度ペナルティ パラメーター。デフォルトは 1.0 です。

  • debug- デバッグログを有効にするかどうか。デフォルトは False です。

5.2、抱き顔.完成

このhuggingface.Completionクライアントは、OpenAI Completion API と互換性のあるテキスト生成推論で実行される HuggingFace モデルと対話するために使用されます。

from easyllm.clients import huggingface

# hubbingface模块会自动从环境变量HUGGINGFACE_TOKEN或HuggingFace CLI配置文件中加载HuggingFace API密钥。
# huggingface.api_key="hf_xxx"
hubbingface.prompt_builder = "llama2"

response = huggingface.Completion.create(
    model="meta-llama/Llama-2-70b-chat-hf",
    prompt="What is the meaning of life?",
    temperature=0.9,
    top_p=0.6,
    max_tokens=1024,
)

サポートされているパラメータは次のとおりです。

  • model- 最終結果を生成するために使用されるモデル。指定しない場合は、デフォルトでベース URL が使用されます。

  • prompt- 補完に使用するテキスト。prompt_builder が設定されている場合、プロンプトは、prompt_builder を使用してフォーマットされます。

  • temperature- 完成結果を生成するために使用される温度パラメータ。デフォルトは 0.9 です。

  • top_p- 完了結果の生成に使用される top_p パラメータ。デフォルトは 0.6 です。

  • top_k- 完了結果を生成するための top_k パラメータ。デフォルトは 10 です。

  • n- 生成する完了した結果の数。デフォルトは 1 です。

  • max_tokens- 生成するトークンの最大数。デフォルトは 1024 です。

  • stop- 終了結果を生成するための停止シーケンス。デフォルトは「なし」です。

  • stream- 完了結果をストリーミングするかどうか。デフォルトは False です。

  • frequency_penalty- 補完を生成するための頻度ペナルティ パラメーター。デフォルトは 1.0 です。

  • debug- デバッグログを有効にするかどうか。デフォルトは False です。

  • echo- プロンプトをエコーするかどうか。デフォルトは False です。

  • logprobs- logprobs (対数確率) を返すかどうか。デフォルトは「なし」です。

5.3、ハグフェイス.埋め込み

このhuggingface.Embeddingクライアントは、OpenAI Embedding API と互換性のある API として実行される HuggingFace モデルと対話するために使用されます。

from easyllm.clients import huggingface

# hubbingface模块会自动从环境变量HUGGINGFACE_TOKEN或HuggingFace CLI配置文件中加载HuggingFace API密钥。
# huggingface.api_key="hf_xxx"

embedding = huggingface.Embedding.create(
    model="sentence-transformers/all-MiniLM-L6-v2",
    text="What is the meaning of life?",
)

len(embedding["data"][0]["embedding"])

サポートされているパラメータは次のとおりです。

  • model- 埋め込みモデルの作成に使用されます。指定しない場合、デフォルトでベース URL が使用されます。

  • input-Union[str, List[str]]埋め込むドキュメント。

5.4. 環境設定

クライアントは、Hugging Face 環境変数を設定するか、デフォルトをオーバーライドすることによって構成できます。HF トークン、URL、ヒント ジェネレーターを調整する方法は次のとおりです。

5.4.1. HFトークンの設定

デフォルトでは、huggingfaceクライアントはHUGGINGFACE_TOKEN環境変数の読み取りを試みます。~/.huggingface設定されていない場合は、フォルダーからトークンを読み取ろうとします。設定されていない場合、トークンは使用されません。

あるいは、設定を通じてトークンを手動で設定することもできますhuggingface.api_key

API キーを手動で設定します。

from easyllm.clients import huggingface

huggingface.api_key="hf_xxx"

res = huggingface.ChatCompletion.create(...)

環境変数を使用します。

import os
os.environ["HUGGINGFACE_TOKEN"] = "hf_xxx"

from easyllm.clients import huggingface

5.4.2. URLアドレスの変更

デフォルトでは、Hugging FaceクライアントはHUGGINGFACE_API_BASE環境変数の読み取りを試みます。この変数が設定されていない場合は、デフォルトの URL アドレスが使用されます。

https://api-inference.huggingface.co/models

これは、別の URL アドレス (https://zj5lt7pmzqzbp0d1.us-east-1.aws.endpoints.huggingface.cloud など) またはローカル URL アドレス (http://localhost:8000 など) を使用する場合に便利です。 ) または Hugging Face 推論エンドポイントは非常に便利です。

さらに、huggingface.api_base設定を通じて URL アドレスを手動で設定できます。カスタム URL アドレスを設定する場合は、modelパラメーターを空白のままにする必要があります。

API ベースを手動で設定します。

from easyllm.clients import huggingface

huggingface.api_base="https://my-url"


res = huggingface.ChatCompletion.create(...)

環境変数を使用します。

import os
os.environ["HUGGINGFACE_API_BASE"] = "https://my-url"

from easyllm.clients import huggingface

5.4.3、構築のヒント

デフォルトでは、huggingfaceクライアントは環境変数を読み取りHUGGINGFACE_PROMPT、値を辞書にマッピングしようとしますPROMPT_MAPPING設定されていない場合は、デフォルトのヒント ジェネレーターが使用されます。手動で設定することもできます。

ヒント ジェネレーターを手動で設定します。

from easyllm.clients import huggingface

huggingface.prompt_builder = "llama2"

res = huggingface.ChatCompletion.create(...)

環境変数を使用します。

import os
os.environ["HUGGINGFACE_PROMPT"] = "llama2"

from easyllm.clients import huggingface

6. OpenAI から HuggingFace への移行

OpenAI から HuggingFace への移行は簡単です。import ステートメントと使用するクライアント、およびオプションのヒント ジェネレーターを変更するだけです。

- import openai
+ from easyllm.clients import huggingface
+ huggingface.prompt_builder = "llama2"


- response = openai.ChatCompletion.create(
+ response = huggingface.ChatCompletion.create(
-    model="gpt-3.5-turbo",
+    model="meta-llama/Llama-2-70b-chat-hf",
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "Knock knock."},
    ],
)

異なるクライアント間で切り替える場合 (つまり、異なるモデルまたはシステムを使用する場合)、ハイパーパラメータが引き続き有効であることを確認してください。たとえば、GPT-3 モデルの温度パラメーターは、Llama-2 モデルの温度パラメーターとは異なる場合があります。

ハイパーパラメータは、モデルの動作とパフォーマンスを調整するために機械学習と深層学習で使用されるパラメータです。一般的なハイパーパラメータの 1 つは温度で、生成されるテキストの多様性とランダム性を制御します。モデルが異なれば、温度パラメーターの要件やデフォルト値も異なる場合があるため、異なるモデル間で切り替えるときは、ハイパーパラメーターの設定が、期待される結果を得るために使用されるモデルと一致するように注意する必要があります。

7. ツールチップ

プロンプト_utils モジュールには、メッセージの辞書を ChatCompletion クライアントで使用できるプロンプトに変換するための関数が含まれています。

現在サポートされているプロンプト形式は次のとおりです。

  • ラマ2

  • ビクーニャ

  • ハグフェイスチャットML

  • ウィザードLM

  • 安定ベルーガ2

  • アシスタントを開く

プロンプト ユーティリティは、モデル名をプロンプト コンストラクターにマップするマッピング ディクショナリ PROMPT_MAPPING もエクスポートします。正しいヒント コンストラクターは、環境変数を介して選択できます。

PROMPT_MAPPING = {
    "chatml_falcon": build_chatml_falcon_prompt,
    "chatml_starchat": build_chatml_starchat_prompt,
    "llama2": build_llama2_prompt,
    "open_assistant": build_open_assistant_prompt,
    "stablebeluga": build_stablebeluga_prompt,
    "vicuna": build_vicuna_prompt,
    "wizardlm": build_wizardlm_prompt,
}

次のコードは、Hugging Face クライアントのヒント ビルダーの設定を示しています。

from easyllm.clients import huggingface

# vicuna, chatml_falcon, chatml_starchat, wizardlm, stablebeluga, open_assistant
huggingface.prompt_builder = "llama2" 

7.1. LLama 2 チャットビルダー

LLama 2 チャット セッションを作成するためのヒント。LLama 2 の使用方法に関するヒントは、Hugging Face ブログで見つけることができます。サポートされていないロールを持つメッセージが渡された場合、エラーがスローされます。

モデル例:

from easyllm.prompt_utils import build_llama2_prompt

messages=[
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": "Explain asynchronous programming in the style of the pirate Blackbeard."},
]
prompt = build_llama2_prompt(messages)

7.2. ビクーニャチャットビルダー

ビクーニャ チャットの会話を作成するためのヒント。サポートされていないロールを持つメッセージが渡された場合、エラーがスローされます。

モデル例:

from easyllm.prompt_utils import build_vicuna_prompt

messages=[
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": "Explain asynchronous programming in the style of the pirate Blackbeard."},
]
prompt = build_vicuna_prompt(messages)

7.3. ハグフェイスチャットMLビルダー

Hugging Face ChatMLチャット会話を作成するためのヒント。StarChatHugging Face ChatML には、や など、サンプル モデルごとに異なるヒントがありますFalconサポートされていないロールを持つメッセージが渡された場合、エラーがスローされます。

モデル例:

7.3.1、スターチャット

from easyllm.prompt_utils import build_chatml_starchat_prompt

messages=[
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": "Explain asynchronous programming in the style of the pirate Blackbeard."},
]
prompt = build_chatml_starchat_prompt(messages)

7.3.2、ファルコン

from easyllm.prompt_utils import build_chatml_falcon_prompt

messages=[
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": "Explain asynchronous programming in the style of the pirate Blackbeard."},
]
prompt = build_chatml_falcon_prompt(messages)

7.4. WizardLM チャットビルダー

WizardLM チャット セッションを作成するためのヒント。サポートされていないロールを持つメッセージが渡された場合、エラーがスローされます。

モデル例:

from easyllm.prompt_utils import build_wizardlm_prompt

messages=[
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": "Explain asynchronous programming in the style of the pirate Blackbeard."},
]
prompt = build_wizardlm_prompt(messages)

7.5. StableBeluga2 チャットビルダー

StableBeluga2 チャット セッションを作成するためのヒント。サポートされていないロールを持つメッセージが渡された場合、エラーがスローされます。

from easyllm.prompt_utils import build_stablebeluga_prompt

messages=[
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": "Explain asynchronous programming in the style of the pirate Blackbeard."},
]
prompt = build_stablebeluga_prompt(messages)

7.6. アシスタントチャットビルダーを開く

オープン アシスタント ChatML テンプレートを作成します。<|prompter|></s><|system|>およびタグを使用します<|assistant|>サポートされていないロールを持つメッセージが渡された場合、エラーがスローされます。

モデル例:

from easyllm.prompt_utils import build_open_assistant_prompt

messages=[
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": "Explain asynchronous programming in the style of the pirate Blackbeard."},
]
prompt = build_open_assistant_prompt(messages)

8. 適用事例

easyllm ライブラリの使用を開始するのに役立つ例をいくつか示します。

説明する
チャット完了の詳細な例
https://philschmid.github.io/easyllm/examples/chat-c ​​ompletion-api/
ChatCompletion API を使用してモデルと会話型チャットを行う方法を示します。
チャットリクエストをストリーミングする方法の例
https://philschmid.github.io/easyllm/examples/stream-chat-c ​​ompletions/
モデルと効率的にチャットするための複数のチャット リクエストのストリーミングを示します。
テキスト補完をストリーミングする方法の例
https://philschmid.github.io/easyllm/examples/stream-text-completions/
複数のテキスト補完リクエストをストリーミングする方法を示します。
詳細な補完例
https://philschmid.github.io/easyllm/examples/text-completion-api/
TextCompletion API を使用してモデルからテキストを生成します。
埋め込みの作成
https://philschmid.github.io/easyllm/examples/get-embeddings/
モデルを使用して、テキストをベクトル表現に埋め込みます。
ハグ顔推論エンドポイントの例
https://philschmid.github.io/easyllm/examples/inference-endpoints-example/
推論エンドポイントやローカルホストなどのカスタム エンドポイントの使用方法の例
Llama 2 取得拡張生成の使用
https://philschmid.github.io/easyllm/examples/llama2-rag-example/
Llama 2 70B を使用して文脈検索を強化する方法の例
Llama 2 70B エージェント/ツール使用例
https://philschmid.github.io/easyllm/examples/llama2-agent-example/
Llama 2 70B を使用してツールと対話し、プロキシとして使用する方法の例

これらの例は、EasyLLM の主な機能であるチャット、テキスト補完、埋め込みをカバーしています。

9、参考文献

  • EasyLLM GitHub

    • https://github.com/philschmid/easyllm

  • コール 2 プロンプト

    • https://huggingface.co/blog/llama2#how-to-prompt-llama-2

  • ビクーニャプロンプト

    • https://github.com/lm-sys/FastChat/blob/main/docs/vicuna_weights_version.md#prompt-template

  • スターチャットプロンプト

    • https://huggingface.co/HuggingFaceH4/starchat-beta

  • ウィザードLMプロンプト

    • https://github.com/nlpxucan/WizardLM/blob/main/WizardLM/src/infer_wizardlm13b.py#L79

  • 安定ベルーガ2

    • https://huggingface.co/stabilityai/StableBeluga2

おすすめ

転載: blog.csdn.net/FrenzyTechAI/article/details/132270200