OpenLLMを試す

2023/07/01に公開

OpenLLMとは

An open platform for operating large language models (LLMs) in production. Fine-tune, serve, deploy, and monitor any LLMs with ease.

大規模言語モデル(LLM)を運用するためのオープンプラットフォームです。あらゆるLLMを簡単に微調整、提供、デプロイ、監視できます。

https://github.com/bentoml/OpenLLM

OpenLLMを動かす

Getting Startedに従って動かしてみます。
Python環境はPython 3.8より新しいバージョンが必要です。
パッケージのコンフリクトを防ぐため、仮想環境の利用が推奨されています。

pipでインストール

pip install openllm
openllm -h

LLMサーバの立ち上げ

以下はメタのOPTモデルで起動する場合です。

openllm start opt

コマンドを実行すると、OPTモデルの一式がダウンロードされます。
モデルのダウンロード後は、http://localhost:3000にてアクセス可能なBentoServerが起動します。

WebUI上で確認

WebUI上では、簡易的にLLMを試すことができる。今回は、OPTモデルでの応答を試します。
http://localhost:3000へアクセスします。

Service APIsの/v1/generateのTry it outを押してみます。

Executeボタンが出てくるので、押すと、Request bodyに応じた問い合わせ結果が出力されます。

Request bodyのprompt部分に質問を入れてみます。

"prompt": "Where is the capital of Japan?"

curlでの問い合わせは以下です。

curl -X 'POST' \
  'http://localhost:3000/v1/generate' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
  "prompt": "Where is the capital of Japan?",
  "llm_config": {
    "format_outputs": false,
    "max_new_tokens": 1024,
    "min_length": 0,
    "early_stopping": false,
    "num_beams": 1,
    "num_beam_groups": 1,
    "use_cache": true,
    "temperature": 0.75,
    "top_k": 15,
    "top_p": 1,
    "typical_p": 1,
    "epsilon_cutoff": 0,
    "eta_cutoff": 0,
    "diversity_penalty": 0,
    "repetition_penalty": 1,
    "encoder_repetition_penalty": 1,
    "length_penalty": 1,
    "no_repeat_ngram_size": 0,
    "renormalize_logits": false,
    "remove_invalid_values": false,
    "num_return_sequences": 1,
    "output_attentions": false,
    "output_hidden_states": false,
    "output_scores": false,
    "encoder_no_repeat_ngram_size": 0
  }
}'

Response bodyの結果は以下となりました。きちんと回答が返ってきています。

{
  "responses": [
    "Where is the capital of Japan?\nTokyo."
  ],
  "configuration": {
    "format_outputs": false,
    "generation_config": {
      "max_new_tokens": 1024,
      "min_length": 0,
      "early_stopping": false,
      "num_beams": 1,
      "num_beam_groups": 1,
      "use_cache": true,
      "temperature": 0.75,
      "top_k": 15,
      "top_p": 1,
      "typical_p": 1,
      "epsilon_cutoff": 0,
      "eta_cutoff": 0,
      "diversity_penalty": 0,
      "repetition_penalty": 1,
      "encoder_repetition_penalty": 1,
      "length_penalty": 1,
      "no_repeat_ngram_size": 0,
      "renormalize_logits": false,
      "remove_invalid_values": false,
      "num_return_sequences": 1,
      "output_attentions": false,
      "output_hidden_states": false,
      "output_scores": false,
      "encoder_no_repeat_ngram_size": 0
    }
  }
}

ターミナルで確認

ターミナル上でもLLMの回答を確認することができます。

optモデルでサーバを起動します。

openllm start opt

サーバを起動した状態で以下を実行します。

python
>>> import openllm
>>> client = openllm.client.HTTPClient('http://localhost:3000')
>>> client.query('Explain to me the difference between "further" and "farther"')
'Explain to me the difference between "further" and "farther"\nFarther means farther from the source. It\'s like a fart but not as bad.'

# DeepLによる日本語訳
"further"と "farfer"の違いを説明してください。fartherは発生源から遠いという意味。おならみたいだけど、それほどひどくない。
GitHubで編集を提案

Discussion