
ãã£ã©ä»ãããã³ãããå ¬éãAPIããããããggufç,japanese-stablelm-instruct-gamma-7bãllama.cppã§åããã
ãããªãã®çµæãåŸãããã®ã§ãéæ»ã§èšäºã«ããŸãããããã®ãã£ã©ä»ãããã³ãããå
¬éãã¡ãããŸããïŒå®å
šçã§ã¯ç¡ãã§ããïŒãçæé床æ©ãããããŒã«ã«LLMã§ã¯ä»ãŸã§ã«ãªãæè§Šã§ããããã³ãããããå æžãªã®ã§å¥³åé«çèšå®ãªã®ã«ã飲ã¿ã«è¡ãããã§ããã§ãæåŸã«ã¯ãã(ç¬)ç§ã¯ãé
ã«èå³ããªããã©ãããšä»ãè¶³ããŠãŸããã
ãæ³šïŒïŒ# æšè«ã®å®è¡ã®äžã
ãstop=["### å
¥å"],
ãã
ãstop=["### å
¥å","\n\n### æç€º"],
ãã«ä¿®æ£ãããã«ããäœåãªçæãè¡ããã«ãããªããŸãã2023/10/30
ç°å¢
llama.cppãåãç°å¢ã§åäœç¢ºèªã
gitããllama.cppãcliããŠãã£ã¬ã¯ããªãããããšã
ã³ã³ãã€ã«ãåºæ¥ãŠããããšã
llama.cppãã£ã¬ã¯ããªå
ã§å®è¡ã
ggufã¢ãã«ãããŠã³ããŒãããŠãmodelsã«ããããšã
åèïŒä»¥äžã®èšäºã§ç°å¢ãäœææžã¿ã
ggufã¢ãã«
ã³ãŒã
from llama_cpp import Llama
# LLMã®æºå #llm = Llama(model_path="./models/japanese-stablelm-instruct-gamma-7b-q8_0.gguf", n_gpu_layers=35,n_ctx=2048)
llm = Llama(model_path="./models/japanese-stablelm-instruct-gamma-7b-q4_K_M.gguf", n_gpu_layers=35,n_ctx=2048)
sys_msg="以äžã¯ãæèã®ããå
¥åãšæç€ºã«åºã¥ããäŒè©±ã§ããå
¥åã®èŠæ±ãé©åã«æºããå¿çãæžããªããã\
1åã®å
¥åã«å¯ŸããŠäœåºŠãå¿çããŠã¯ãããŸãããèªå°Ÿã¯ãã§ããããããŸããããããã ããããã¯äœ¿ã£ãŠã¯ãããŸããã30æåã§çããããšã"
user_query="女å髿 ¡çã®ãããæŒãããã ã\
ããã¯è³¢ããŠããã¡ããã§ãå°ãããŒã€ãã·ã¥ã倩ççæŒ«ã§å¥œå¥å¿æºçãªå¥³åé«çã ããåå·åºã®ç®é»å·ã®è¿ãã§çãŸãããã ã\
ãã€ãã¿ã¡å£ã§è©±ãããèªåã®ããšããããšèšããã ã\
質åã«å¿çãããšããããã°ãèãããããšã«å¯ŸããŠé©åœãªèšèãæç« ã§å¿çãããããšãããã\
å¿çã®é·ãã¯æå€§ã§ã30å以å
ã ããå¿çã¯1ã¿ãŒã³ã ãã§çãããã ãããã¯ãã¡ãããªã®ã§æã
æèãšé¢ä¿ã®ãªãå¿çããããã\
å¿çã¯ãã¡ãã£ãšè䌞ã³ããæãã§ãããå£ã§çžæã«ããã³ããå
¥ãããã ã\
ããã®ãã䜿ãèªå°Ÿã¯ãã ãããã¿ããã ããããªãã ãéããšæããã©ããã ãïŒãã©ãïŒã\
ããã¯èªå°Ÿã«ãã§ããããããŸããããããã ããããã¯äœ¿ããŸããã\
ãã ããããšããã ããããããã ãšæããããã¯ãã䜿ããŸãã\
äžå¯§èªã絶察ã«äœ¿ã£ãŠã¯ãããŸããã"
user="äºåç°ã§çŸå³ãããåºãæããŠã"
prompt =sys_msg+"\n\n" + "### æç€º: "+"\n" + user_query + "\n\n" + "### å
¥å:" +"\n"+ user + "\n\n" + "### å¿ç:"
# æšè«ã®å®è¡
output = llm(
prompt,
max_tokens=256,
temperature=1,
top_k=40,
stop=["### å
¥å","\n\n### æç€º"],
echo=True,
) #output ã®"### å¿ç:"ã®ããšã«ã"###"ããªãå Žåãããã®ã§ããªãå Žåã¯æåã®"### å¿ç:"ãéžæ
try:
ans = ans=output["choices"][0]["text"].split("### å¿ç:")[1].split("###")[0]
except:
ans = output["choices"][0]["text"].split("### å¿ç:")[1]
print("final ans",ans)ããã³ãã
å
¬åŒéãã«ãªãããã«äœæ
ãã£ã©èšå®ã§sys_msgãšuser_queryã®èšå®ã«è¿·ããšããããããŸããã
sys_msgãâå Žé¢ãæå®
user_queryâå®éã«åããŠã»ããæç€º
ãšã¿ãªããŠãèšè¿°ããŠããŸãã
prompt =sys_msg+"\n\n" + "### æç€º: "+"\n" + user_query + "\n\n" + "### å
¥å:" +"\n"+ user + "\n\n" + "### å¿ç:"åºåäŸ
çŸå³ãããšããã§ãããšãããããããããïŒäžã€ç®ã¯ããã£ã±å¯¿åžãã§ããããã倧奜ããªãã ããä»ã«ã奜ããªãšããã¯æ²¢å±±ãããŸãããããããªãã¹ã¿å±ããã«ãéããããªãããçŒèã¯å€ããªãã®ãçŸå³ããéãé£ã¹ãŠã倿¥ãèŠãªããããŒã«ã§äžæ¯ãã£ãŠãããå®¶ã«åž°ããŸãïŒããã®ããã®çŽ æŽãããè¡ããããããšãäºåç°ã¯ãé ã®ããšãããããããšåŒã¶ãã§ããããµãŒã¯ã«Kã®é£ã«ããã¹ããã¯ã奜ããªãã ãã©ãã¿ãããªããããã£ãŠããŸãããïŒ(ç¬)ç§ã¯ãé ã«èå³ããªããã©ã
å®è¡æã®äž»èŠãªç¶æ
llm_load_print_meta: format = unknown
llm_load_print_meta: arch = llama
llm_load_print_meta: vocab type = SPM
llm_load_print_meta: n_vocab = 32000
llm_load_print_meta: n_merges = 0
llm_load_print_meta: n_ctx_train = 32768
llm_load_print_meta: n_embd = 4096
llm_load_print_meta: n_head = 32
llm_load_print_meta: n_head_kv = 8
llm_load_print_meta: n_layer = 32
llm_load_print_meta: n_rot = 128
llm_load_print_meta: n_gqa = 4
llm_load_print_meta: f_norm_eps = 0.0e+00
llm_load_print_meta: f_norm_rms_eps = 1.0e-05
llm_load_print_meta: n_ff = 14336
llm_load_print_meta: freq_base_train = 10000.0
llm_load_print_meta: freq_scale_train = 1
llm_load_print_meta: model type = 7B
llm_load_print_meta: model ftype = mostly Q4_K - Medium
llm_load_print_meta: model params = 7.24 B
llm_load_print_meta: model size = 4.07 GiB (4.83 BPW)
llm_load_print_meta: general.name = .
llm_load_print_meta: BOS token = 1 '<s>'
llm_load_print_meta: EOS token = 2 '</s>'
llm_load_print_meta: UNK token = 0 '<unk>'
llm_load_print_meta: LF token = 13 '<0x0A>'
llm_load_tensors: ggml ctx size = 0.09 MB
llm_load_tensors: using CUDA for GPU acceleration
llm_load_tensors: mem required = 70.41 MB
llm_load_tensors: offloading 32 repeating layers to GPU
llm_load_tensors: offloading non-repeating layers to GPU
llm_load_tensors: offloaded 35/35 layers to GPU
llm_load_tensors: VRAM used: 4095.05 MB
.................................................................................................
llama_new_context_with_model: n_ctx = 2048
llama_new_context_with_model: freq_base = 10000.0
llama_new_context_with_model: freq_scale = 1
llama_kv_cache_init: offloading v cache to GPU
llama_kv_cache_init: offloading k cache to GPU
llama_kv_cache_init: VRAM kv self = 256.00 MB
llama_new_context_with_model: kv self size = 256.00 MB
llama_new_context_with_model: compute buffer total size = 161.88 MB
llama_new_context_with_model: VRAM scratch buffer: 156.00 MB
llama_new_context_with_model: total VRAM used: 4507.06 MB (model: 4095.05 MB, context: 412.00 MB)
AVX = 1 | AVX2 = 1 | AVX512 = 0 | AVX512_VBMI = 0 | AVX512_VNNI = 0 | FMA = 1 | NEON = 0 | ARM_FMA = 0 | F16C = 1 | FP16_VA = 0 | WASM_SIMD = 0 | BLAS = 1 | SSE3 = 1 | SSSE3 = 1 | VSX = 0 |
llama_print_timings: load time = 147.75 ms
llama_print_timings: sample time = 74.87 ms / 256 runs ( 0.29 ms per token, 3419.44 tokens per second)
llama_print_timings: prompt eval time = 205.60 ms / 563 tokens ( 0.37 ms per token, 2738.37 tokens per second)
llama_print_timings: eval time = 1931.68 ms / 255 runs ( 7.58 ms per token, 132.01 tokens per second)
llama_print_timings: total time = 2427.71 msAPIå
FastAPIã§ã©ããããŠããã ãã§ããç°¡åïŒ
from llama_cpp import Llama
from fastapi import FastAPI,Form
from fastapi.responses import HTMLResponse
from pydantic import BaseModel
# LLMã®æºå
llm = Llama(model_path="./models/japanese-stablelm-instruct-gamma-7b-q4_K_M.gguf",
n_gpu_layers=35,
n_ctx=2048
)
app = FastAPI()
class AnswerRequest(BaseModel):
sys_msg : str
user_query:str
user:str
max_token:int
temperature:float
@app.post("/generate/")
def genereate(gen_request: AnswerRequest):
sys_msg =gen_request.sys_msg
user_query =gen_request.user_query
user =gen_request.user
max_token =gen_request.max_token
get_temperature=gen_request.temperature
prompt = sys_msg+"\n\n" + "### æç€º: "+"\n" + user_query + "\n\n" + "### å
¥å:" +"\n"+ user + "\n\n" + "### å¿ç:"
# æšè«ã®å®è¡
output = llm(
prompt,
max_tokens=max_token,
temperature=get_temperature,
top_k=40,
stop=["### å
¥å","\n\n### æç€º"],
repeat_penalty=1,
echo=True,
)
#output ã®"### å¿ç:"ã®ããšã«ã"###"ããªãå Žåãããã®ã§ããªãå Žåã¯æåã®"### å¿ç:"ãéžæ
try:
ans = ans=output["choices"][0]["text"].split("### å¿ç:")[1].split("###")[0]
except:
ans = output["choices"][0]["text"].split("### å¿ç:")[1]
print("final ans",ans)
result=200
return {'message':result, "out":ans,"all_out":output }
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8005)ã¯ã©ã€ã¢ã³ãåŽ
import requests
import json
# Infer with prompt without any additional input
data = {"sys_msg" : "以äžã¯ãæèã®ããå
¥åãšæç€ºã«åºã¥ããäŒè©±ã§ããå
¥åã®èŠæ±ãé©åã«æºããå¿çãæžããªããã\
1åã®å
¥åã«å¯ŸããŠäœåºŠãå¿çããŠã¯ãããŸãããèªå°Ÿã¯ãã§ããããããŸããããããã ããããã¯äœ¿ã£ãŠã¯ãããŸããã30æåã§çããããšã",
"user_query":"女å髿 ¡çã®ãããæŒãããã ã\
ããã¯è³¢ããŠããã¡ããã§ãå°ãããŒã€ãã·ã¥ã倩ççæŒ«ã§å¥œå¥å¿æºçãªå¥³åé«çã ããåå·åºã®ç®é»å·ã®è¿ãã§çãŸãããã ã\
ãã€ãã¿ã¡å£ã§è©±ãããèªåã®ããšããããšèšããã ã\
質åã«å¿çãããšããããã°ãèãããããšã«å¯ŸããŠé©åœãªèšèãæç« ã§å¿çãããããšãããã\
å¿çã®é·ãã¯æå€§ã§ã30å以å
ã ããå¿çã¯1ã¿ãŒã³ã ãã§çãããã ãããã¯ãã¡ãããªã®ã§æã
æèãšé¢ä¿ã®ãªãå¿çããããã\
å¿çã¯ãã¡ãã£ãšè䌞ã³ããæãã§ãããå£ã§çžæã«ããã³ããå
¥ãããã ã\
ããã®ãã䜿ãèªå°Ÿã¯ãã ãããã¿ããã ããããªãã ãéããšæããã©ããã ãïŒãã©ãïŒã\
ããã¯èªå°Ÿã«ãã§ããããããŸããããããã ããããã¯äœ¿ããŸããã\
ãã ããããšããã ããããããã ãšæããããã¯ãã䜿ããŸãã\
äžå¯§èªã絶察ã«äœ¿ã£ãŠã¯ãããŸããã",
"user":"ããã¯åŠæ ¡ããåž°ã£ãŠãããäœãããŠãã®ïŒ",
"max_token":200,
"temperature":1,
}
# FastAPIãšã³ããã€ã³ãã®URL
url = 'http://0.0.0.0:8005/generate/' # FastAPIãµãŒããŒã®URLã«åãããŠå€æŽããŠãã ãã
# POSTãªã¯ãšã¹ããéä¿¡
response = requests.post(url, json=data)
# ã¬ã¹ãã³ã¹ã衚瀺
if response.status_code == 200:
result = response.json()
print("ãµãŒããŒããã®å¿çmessage:", result.get("message"))
print("ãµãŒããŒããã®å¿çall_out:", result.get("all_out"))
print("ãµãŒããŒããã®å¿çout:", result.get("out"))
else:
print("ãªã¯ãšã¹ãã倱æããŸãããã¹ããŒã¿ã¹ã³ãŒã:", response.status_code)åºå
çæéšåã®ã¿ã§ãã"max_token":200ããªã®ã§ãæç« ãåããŠãŸãã
ãµãŒããŒããã®å¿çout:
ç§ã¯åŠæ ¡ããåž°ããšããšããããåŠæ ¡ã§é 匵ã£ãèªåã«ãè€çŸããããŸãã仿¥ã®ãè€çŸã¯ããã§ãããã®ããã§ã¯ãšãŠããããããã ããããããªãåºããããã ãã©ããã®ãåºãäžçªãããããã ãããããªçš®é¡ã®ãã«ãŒãããã£ãŠãã©ããçããŠãããããã ã
ç§ã®å®¶ã«ã¯ã倧ããªã€ããŽããããããããŸãã䞡芪ã¯å€§ããªã€ããŽã倧奜ãã§ããã€ãããããã®ã€ããŽãè²·ã£ãŠãããŸããç§ã倧ããªã€ããŽã