OpenAI互換APIサーバーを動かしたローカルPCのLLMで LangChain を試す

タイトルが技術用語いっぱいで騒がしい感じですいません。FastChatのバージョンアップで、OpeAI 互換のAPIサーバー機能が追加されてOpenAI SDKからローカルPCで動くLLMを使えるようになったので、早速ためしてみました。

1. APIサーバーの起動

FastChatのドキュメントに従ってAPIサーバー類を起動します。
まずはcontroller。

python3 -m fastchat.serve.controller

お次はmodel_worker。今回はお試しでvicuna-13b-v1.1を --load-8bit オプションをつけて起動します。環境によりお好きなモデルでお試しください。

python3 -m fastchat.serve.model_worker --model-name 'vicuna-13b-v1.1' \
--model-path ~/models/vicuna-13b-v1.1/ \
--load-8bit

最後にRESTful APIサーバーを起動します。

python3 -m fastchat.serve.openai_api_server --host localhost --port 8000

2. OpenAI 公式SDKで動作確認

まずはOpenAI 公式SDKで試してみます。

import openai
openai.api_key = "EMPTY" # Not support yet
openai.api_base = "http://localhost:8000/v1"

model = "vicuna-13b-v1.1"
prompt = "昔、むかしあるところに"

# create a completion
completion = openai.Completion.create(model=model, prompt=prompt, max_tokens=64)
# print the completion
print(prompt + completion.choices[0].text +"\n\n")

# create a chat completion
completion = openai.ChatCompletion.create(
  model=model,
  messages=[{"role": "user", "content": "こんにちは。お名前は?"}]
)
# print the completion
print(completion.choices[0].message.content)

昔、むかしあるところに、強い魔法使いが住んでいた。 地上、隠れた山に、その魔法使いの住まいがあった。 その魔法使いは、異世界へ


こんにちは!私はアレックスと申します。

いい感じですね。😊

3. LangChainでお試し

では、本題のLangChainからlangchain の ChatOpenAIクラスを使ってVicuna-13B を叩いてみます。

from langchain.chat_models import ChatOpenAI
from langchain.schema import HumanMessage
from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler

API_KEY = "EMPTY"
API_BASE = "http://localhost:8000/v1"
MODEL = "vicuna-13b-v1.1"
chat = ChatOpenAI(model_name=MODEL, 
                  openai_api_key=API_KEY, 
                  openai_api_base=API_BASE,
                  streaming=True, 
                  callbacks=[StreamingStdOutCallbackHandler()] ,
                  temperature=0)
resp = chat([HumanMessage(content="RTX3090の歌をつくって")])

はい、RTX3090の歌をつくることができます。
これは、RTX3090のパワーを受け入れ、力を引き出した歌です。

(Verse 1)
I'm feeling the power, it's a force so strong
It's like a rocket, taking me to the moon
The RTX3090, it's a beast so wild
It's got the power, to make my dreams come true

(Chorus)
RTX3090, RTX3090
With you by my side, I can't be stopped
RTX3090, RTX3090
You're the one that I want, to make my game run hot

(Verse 2)
It's not just a card, it's a work of art
It's got the power, to make my heart start
The RTX3090, it's a masterpiece so fine
It's got the power, to make my game shine

(Chorus)
RTX3090, RTX3090
With you by my side, I can't be stopped
...
With you by my side, I can't be stopped
RTX3090, RTX3090
You're the one that I want, to make my game run hot


This is just a rough draft of the song, and you can adjust the lyrics as you see fit. I hope this helps!

  • 無事、ストリーミングのコールバック関数を使った例題が正常に動作しました。

  • 手元のRTX3090でVicuna-13Bだと動作速度は若干もっさりしてますが、用途にあわせてVicuna-7Bに変えたり色々試せると思います。

  • OpenAIの公式SDKやLangChainを、GPT- 3.5、GPT-4のインターフェイスでローカルPCで安心してテストできるメリットは大きいかも。😝

おまけ

試しに歌詞をSongRに放り込んでみました。

激しいやつを想像してたら思った以上に平和な曲になってしまった。😅

おしまい💦


この記事が気に入ったらサポートをしてみませんか?