📘

ローカルのELYZA-japanese-Llama-2-7bをlangchainで試す

2023/09/02に公開

はじめに

langchainでローカルPC上にダウンロードしたELYZA-japanese-Llama-2-7bをlangchainで使ってみます。

試した環境は以下のとおりです。

  • Core i9-13900
  • 64GB RAM
  • GeForce RTX 4090
  • Windows 11 Pro

できたのはこちら
bathtimefish/langchain_local_using.ipynb

やってみる

from langchain import HuggingFacePipeline, PromptTemplate, LLMChain
from langchain.prompts import (
    ChatPromptTemplate,
    SystemMessagePromptTemplate,
    HumanMessagePromptTemplate,
)
from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline
import torch
# 基本パラメータ
model_name = "elyza/ELYZA-japanese-Llama-2-7b-instruct"
task = "text-generation"
# GPUの確認
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
device

device(type='cuda')

# モデルのダウンロード
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name).to(device)
# LLMs: langchainで上記モデルを利用する
pipe = pipeline(
    task, 
    model=model,
    tokenizer=tokenizer,
    device=0,            # Number of GPU Device
    framework='pt',      # Use PyTorch
    max_new_tokens=1024,
)

llm = HuggingFacePipeline(pipeline=pipe)
# Prompts: プロンプトを作成
template = "<s>[INST] <<SYS>>あなたはユーザの質問に回答する優秀なアシスタントです。以下の質問に可能な限り丁寧に回答してください。 <</SYS>>\n\n{question}[/INST]"
prompt = PromptTemplate.from_template(template)
#sys_prompt = SystemMessagePromptTemplate.from_template("あなたはユーザの質問に回答する優秀なアシスタントです。以下の質問に可能な限り丁寧に回答してください。")
#hum_prompt =  HumanMessagePromptTemplate.from_template("{question}")
#prompt = ChatPromptTemplate.from_messages([sys_prompt, hum_prompt])
# Chains: llmを利用可能な状態にする
llm_chain = LLMChain(prompt=prompt, llm=llm, verbose=True)
question = "カレーライスとは何ですか?"
llm_chain.run({"question":question})

Entering new LLMChain chain...
Prompt after formatting:
< s>[INST] << SYS>>あなたはユーザの質問に回答する優秀なアシスタントです。以下の質問に可能な限り丁寧に回答してください。 << /SYS>>

カレーライスとは何ですか?[/INST]

Finished chain.
' カレーライスとは、ご飯の上にカレーが乗っている料理のことです。一般的には、米を炊いた後、その米をカレーのルーで炒めたり、浸けたりして作ります。また、具材としてチキンやエビ、肉などが入ったり、サラダやヨーグルトが添えられることもあります。'

おわりに

ローカルでわりと実用的なエージェントが作成できそうな感じがしました。

一点うまくいかなかったのが PromptTemplateの生成。以下のように

sys_prompt = SystemMessagePromptTemplate.from_template("あなたはユーザの質問に回答する優秀なアシスタントです。以下の質問に可能な限り丁寧に回答してください。")
hum_prompt =  HumanMessagePromptTemplate.from_template("{question}")
prompt = ChatPromptTemplate.from_messages([sys_prompt, hum_prompt])

とprompt templateを作って実行してみたら推論に長時間かかって結果が出なかった。なんとなく日本語特化モデルだからかなと思いながらも勉強不足で原因は特定できてません。

Discussion