PROsに対する推論
PROs推論
今日は、PROユーザー向けのInferenceを紹介します。これは、最もエキサイティングなモデルのAPIへのアクセス、無料Inference APIの使用に対する改善されたレート制限を提供するコミュニティオファリングです。PROに登録するためには、以下のページをご利用ください。
Hugging Face PROユーザーは、テキスト生成推論による超高速推論の恩恵を受けるパワフルなモデルのカリキュレーションエンドポイントに独占的にアクセスすることができます。これは、すべてのHugging Faceユーザーが利用できる無料の推論APIの上にある特典です。PROユーザーは、これらのモデルに対してより高いレート制限を享受するだけでなく、今日最も優れたモデルへの独占的なアクセスも楽しむことができます。
目次
- サポートされているモデル
- PRO向けInferenceの始め方
- アプリケーション
- Llama 2とCode Llamaでのチャット
- Code Llamaを使用したコード補完
- Stable Diffusion XL
- 生成パラメータ
- テキスト生成の制御
- 画像生成の制御
- キャッシング
- ストリーミング
- PROに登録する
- FAQ
サポートされているモデル
Hubで利用可能な数千の公開モデルに加えて、PROユーザーは以下の最先端のモデルへの無料アクセスを得ることができます:
PRO向けInferenceを使用すると、自分自身のインフラストラクチャにデプロイすることなく、新しいモデルでの実験やプロトタイプ作成が簡単になります。PROユーザーは、上記のすべてのモデルに対して使用準備が整ったHTTPエンドポイントにアクセスすることができます。これは、重いプロダクションアプリケーションには使用しないように意図されています。その場合は、Inferenceエンドポイントを使用することをお勧めします。PRO向けInferenceでは、コード補完のためのVS Code拡張機能を使用したり、独自のバージョンのHugging Chatを使用したりするなど、LLMエンドポイントに依存するアプリケーションを使用することもできます。
PRO向けInferenceの始め方
PRO向けInferenceの使用は、実行したいモデルのAPIエンドポイントにPOSTリクエストを送信するだけです。また、リクエストでPROアカウントの認証トークンを取得し、使用する必要もあります。たとえば、ターミナルセッションでLlama 2 70B Chatを使用してテキストを生成する場合は、次のような操作を行います:
curl https://api-inference.huggingface.co/models/meta-llama/Llama-2-70b-chat-hf \
-X POST \
-d '{"inputs": "In a surprising turn of events, "}' \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <YOUR_TOKEN>"
これにより、次のような結果が表示されます:
[
{
"generated_text": "In a surprising turn of events, 20th Century Fox has released a new trailer for Ridley Scott's Alien"
}
]
temperature
やmax_new_tokens
など、おなじみのトランスフォーマーの生成パラメータも使用することができます:
curl https://api-inference.huggingface.co/models/meta-llama/Llama-2-70b-chat-hf \
-X POST \
-d '{"inputs": "In a surprising turn of events, ", "parameters": {"temperature": 0.7, "max_new_tokens": 100}}' \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <YOUR_TOKEN>"
[
{
"generated_text": "In a surprising turn of events, 2K has announced that it will be releasing a new free-to-play game called NBA 2K23 Arcade Edition. This game will be available on Apple iOS devices and will allow players to compete against each other in quick, 3-on-3 basketball matches.\n\nThe game promises to deliver fast-paced, action-packed gameplay, with players able to choose from a variety of NBA teams and players, including some of the biggest"
}
]
詳細な生成パラメータについては、以下の「テキスト生成の制御」をご覧ください。
Pythonでリクエストを送信する場合は、huggingface_hub
Pythonライブラリで利用できる便利なユーティリティであるInferenceClient
を活用することができます。
pip install huggingface_hub
InferenceClient
は、Inference APIとInference Endpointsへの簡単な呼び出しを行うための便利なラッパーです:
from huggingface_hub import InferenceClient
client = InferenceClient(model="meta-llama/Llama-2-70b-chat-hf", token=YOUR_TOKEN)
output = client.text_generation("詳細を教えていただけますか")
print(output)
クライアントをインスタンス化する際に毎回トークンを明示的に渡したくない場合は、notebook_login()
(Jupyterノートブックの場合)、huggingface-cli login
(ターミナルの場合)、またはlogin(token=YOUR_TOKEN)
(その他の場所)を使用して、一度だけログインします。その後、トークンは自動的にここから使用されます。
Pythonに加えて、JavaScriptを使用してJSやNodeアプリケーション内で推論呼び出しを統合することもできます。はじめに、huggingface.jsを見てみましょう!
応用
Llama 2およびCode Llamaとのチャット
チャット会話に従うために準備されたモデルは、モデルに依存する非常に特定かつ具体的なチャットテンプレートでトレーニングされています。モデルが期待する形式に注意し、クエリでそれを再現する必要があります。
以下の例は、当社のLlama 2ブログ投稿から取得したもので、会話のクエリ方法を詳細に説明しています:
prompt = """<s>[INST] <<SYS>>
彼らは、助けになり、尊重し、正直なアシスタントです。可能な限り助けになる回答をしながら、安全性を確保してください。回答には、有害、不道徳、人種差別的、性差別的、有毒、危険、または違法なコンテンツを含めないでください。回答が社会的に偏見のないポジティブなものであることを確認してください。
質問が意味をなさない場合や事実に矛盾している場合は、間違った回答をする代わりになぜかを説明してください。質問の回答が分からない場合は、誤った情報を共有しないでください。
<</SYS>>
私の庭にラマがいます 😱 私は何をすればいいですか? [/INST]
"""
response = client.text_generation(prompt, max_new_tokens=200)
print(response)
この例は、マルチターンの会話の最初のメッセージの構造を示しています。 <<SYS>>
デリミタを使用してシステムプロンプトを提供し、モデルにどのように振る舞ってほしいかを伝えます。そして、クエリは[INST]
デリミタの間に挿入されます。
会話を続ける場合は、モデルの応答をシーケンスに追加し、その後に新しいフォローアップ指示を発行する必要があります。これがLlama 2に使用する必要のあるプロンプトテンプレートの一般的な構造です:
<s>[INST] <<SYS>>
{{ system_prompt }}
<</SYS>>
{{ user_msg_1 }} [/INST] {{ model_answer_1 }} </s><s>[INST] {{ user_msg_2 }} [/INST]
この同じ形式は、Code Llama Instructでも使用でき、コードに詳しいアシスタントとの技術的な会話に参加するために使用できます!
詳細については、当社のLlama 2ブログ投稿を参照してください。
Code Llamaを使用したコードの埋め込み
Code Llamaのようなコードモデルは、前の例で使用した生成戦略と同じように、コードの補完に使用することができます。開始文字列を提供し、モデルが続きのシーケンスを適切な内容で続けるようにします。コードモデルは、プレフィックスとサフィックスのシーケンスを提供し、モデルが間に入るべき内容を予測します。これは、IDEの拡張などのアプリケーションに適しています。Code Llamaを使用した例を見てみましょう:
client = InferenceClient(model="codellama/CodeLlama-13b-hf", token=YOUR_TOKEN)
prompt_prefix = 'def remove_non_ascii(s: str) -> str:\n """ '
prompt_suffix = "\n return result"
prompt = f"<PRE> {prompt_prefix} <SUF>{prompt_suffix} <MID>"
infilled = client.text_generation(prompt, max_new_tokens=150)
infilled = infilled.rstrip(" <EOT>")
print(f"{prompt_prefix}{infilled}{prompt_suffix}")
def remove_non_ascii(s: str) -> str:
""" Remove non-ASCII characters from a string.
Args:
s (str): The string to remove non-ASCII characters from.
Returns:
str: The string with non-ASCII characters removed.
"""
result = ""
for c in s:
if ord(c) < 128:
result += c
return result
ご覧の通り、入力値のフォーマットは以下のパターンに従います:
prompt = f"<PRE> {prompt_prefix} <SUF>{prompt_suffix} <MID>"
このタスクの詳細については、以下のリンクをご覧ください:https://huggingface.co/blog/codellama#code-completion。
Stable Diffusion XL
PROユーザー向けにSDXLも利用可能です。エンドポイントから返されるレスポンスは、生成された画像を表すバイトストリームで構成されています。 InferenceClient
を使用すると、自動的に PIL
画像にデコードされます:
sdxl = InferenceClient(model="stabilityai/stable-diffusion-xl-base-1.0", token=YOUR_TOKEN)
image = sdxl.text_to_image(
"暗いゴシックの街、霧の中の夜、街灯に照らされています。マントをまとった男性が私たちから離れて歩いています",
guidance_scale=9,
)
生成の制御方法の詳細については、このセクションをご覧ください。
生成パラメータ
テキスト生成の制御
テキスト生成は幅広いトピックであり、異なる目的に対してさまざまな生成戦略が存在します。このテーマの優れた概要をおすすめします。テキスト生成エンドポイントでは多くの生成アルゴリズムがサポートされており、以下のパラメータを使用して構成することができます:
do_sample
:False
に設定すると(デフォルト値)、生成方法は貪欲探索になり、提供されたプロンプトの後に最も確率の高い継続シーケンスを選択します。貪欲探索は決定論的であり、同じ入力からは常に同じ結果が返されます。do_sample
をTrue
にすると、トークンは確率分布からサンプリングされるため、呼び出しによって異なる結果が得られます。temperature
:生成からの変動量を制御します。0
の温度は貪欲探索と同等です。temperature
に値を設定すると、do_sample
が自動的に有効になります。これはtop_k
とtop_p
でも同様です。コード関連のタスクでは、変動性が少なくなるように、低いtemperature
を推奨します。他のタスク(例:自由文生成)では、より高い値を推奨します。top_k
:「トップK」サンプリングを有効にします。モデルは、入力シーケンスの後に発生する可能性のある最も確率の高いK
トークンから選択します。一般的な値は10から50の間です。top_p
:「核選択サンプリング」を有効にします。モデルは、特定の確率の範囲をカバーするために必要なだけのトークンから選択します。top_p
が0.9の場合、90%の最も確率の高いトークンがサンプリング対象となり、残りの10%は無視されます。repetition_penalty
:生成されたシーケンスで重複する単語を避けるようにします。seed
:再現性のためにサンプリングと組み合わせて使用できるランダムシードです。
上記のサンプリングパラメータに加えて、次のような生成の一般的な側面を以下で制御することもできます:
max_new_tokens
:生成する新しいトークンの最大数。デフォルトは20
ですが、シーケンスを長くしたい場合は自由に増やしてください。return_full_text
:エンドポイントが返す出力に入力シーケンスを含めるかどうか。InferenceClient
が使用するデフォルトはFalse
ですが、エンドポイント自体はデフォルトでTrue
を使用します。stop_sequences
:出力で遭遇した場合に生成を停止させるシーケンスのリスト。
画像生成の制御
SDXLエンドポイントで生成された画像に対してより詳細な制御を行いたい場合は、次のパラメータを使用できます:
negative_prompt
:モデルが避けるようにしたいコンテンツを説明するテキスト。guidance_scale
:モデルがプロンプトに一致する程度を調整します。数値が低いほど正確性が低くなり、非常に高い数値では画像の品質が低下したりアーティファクトが生成される可能性があります。width
とheight
:希望する画像の寸法。SDXLは768から1024のサイズに最適です。num_inference_steps
:実行するノイズ除去ステップの数。数が大きいほど品質が向上しますが、速度が遅くなります。一般的な値は20から50ステップです。
テキストから画像を生成する詳細については、diffusersライブラリのドキュメンテーションをご参照ください。
キャッシュ
同じ生成を複数回実行すると、APIが返す結果が同じであることに気付くでしょう(greedyデコーディングではなくサンプリングを使用している場合でも同様です)。これは最近の結果がキャッシュされているためです。毎回異なる応答を強制するには、HTTPヘッダーを使用してサーバーに新しい生成を実行するよう指示することができます:x-use-cache: 0
。
InferenceClient
を使用している場合、headers
クライアントプロパティにそれを簡単に追加できます:
client = InferenceClient(model="meta-llama/Llama-2-70b-chat-hf", token=YOUR_TOKEN)
client.headers["x-use-cache"] = "0"
output = client.text_generation("In a surprising turn of events, ", do_sample=True)
print(output)
ストリーミング
トークンのストリーミングは、モデルがトークンを生成するたびにサーバーがトークンを一つずつ返すモードです。これにより、ユーザーに進行中の生成を表示することが可能になります。ストリーミングはエンドユーザーエクスペリエンスの重要な側面であり、スムーズなエクスペリエンスのための最も重要な要素であるレイテンシを減らす役割を果たします。
InferenceClient
を使用してトークンをストリーミングするには、stream=True
を指定して応答を反復処理します。
for token in client.text_generation("How do you make cheese?", max_new_tokens=12, stream=True):
print(token)
# To
# make
# cheese
#,
# you
# need
# to
# start
# with
# milk
curlを使用してgenerate_streamエンドポイントを使用する場合、curlのデフォルトのバッファリングを無効にし、サーバーからデータが到着するとすぐに表示するための-N
/--no-buffer
フラグを追加できます。
curl -N https://api-inference.huggingface.co/models/meta-llama/Llama-2-70b-chat-hf \
-X POST \
-d '{"inputs": "In a surprising turn of events, ", "parameters": {"temperature": 0.7, "max_new_tokens": 100}}' \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <YOUR_TOKEN>"
PROに登録する
PROサブスクリプションには、こちらから今すぐ登録できます。より高いレート制限、最新モデルのためのカスタム高速エンドポイント、機能への早期アクセスを活用できます。Inference APIで興味深いプロジェクトを作成したり、PRO向けに利用できないモデルを探している場合は、このディスカッションをご利用ください。エンタープライズユーザーもPRO Inference APIを利用することで、SSOなどの他の機能に加えて利益を得ることができます。
FAQ
無料Inference APIに影響はありますか?
いいえ。私たちは依然として数千のモデルを無料のAPIを通じて公開しており、人々がモデルの機能を素早くプロトタイプ作成や探索することができます。
エンタープライズユーザーに影響はありますか?
エンタープライズサブスクリプションをお持ちのユーザーは、カスタムモデルに対しても高速の推論APIを利用することができます。
PRO Inference APIで独自のモデルを使用できますか?
無料のInference APIは、diffusers、transformers、sentence transformersなどのさまざまなライブラリから小規模なモデルやVoAGIモデルをすでにサポートしています。カスタムモデルやカスタム推論ロジックをお持ちの場合は、Inference Endpointsを使用することをおすすめします。
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles