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に放り込んでみました。
激しいやつを想像してたら思った以上に平和な曲になってしまった。😅
おしまい💦