MiuLab/Taiwan-LLM

使用ggmlv3 q6_K model, inference會掉字

wennycooper opened this issue · 3 comments

您好,
我使用ggml quantize 成為 q6_K format, 然後用以下 code 做inference

`
from langchain.llms import LlamaCpp
from langchain.callbacks.manager import CallbackManager
from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler

# Callbacks support token-wise streaming
callback_manager = CallbackManager([StreamingStdOutCallbackHandler()])

# load Llama-2 model
llm = LlamaCpp(
    model_path="/workspace/test/TaiwanLLama_v1.0/Taiwan-LLaMa-13b-1.0.ggmlv3.q6_K.bin",
    n_gpu_layers=16,
    n_batch=8,
    n_ctx=2048,
    temperature=0.1,
    max_tokens=512,
    callback_manager=callback_manager,
)

# response = run_simple_qa(llm, query)
prompt_template = """A chat between a curious user and an artificial intelligence assistant. The assistant gives helpful, detailed, and polite answers to the user's questions. USER: {} ASSISTANT:"""
prompt = prompt_template.format("什麼是深度學習?")
response = llm(prompt)

`
結果會掉字... 如下:

深度學是機器學的一子集,基人工神經結。使得計算機能通別模式大量中學,而不需要明編程。深度學算法用分、進行和別模式

從程式碼裡面的敘述 Callbacks support token-wise streaming 來看,很有可能是 StreamingStdOutCallbackHandler 的問題。你可以尋找看看有沒有 StreamingStdOutCallbackHandler 與 UTF-8 CJK Character 相關的 Issue,或者不要使用 Streaming 等 Inference 完之後把 Response 印出來就好

這類 Streaming 的輸出遇上 BPE Tokenizer 與中日韓文字都很容易發生類似的情況

@wennycooper 我剛剛實際測試了一下,我發現你使用的模型是 ggml v3 的格式,這個格式已經被 ggml 官方標記為 deprecation
所以我是使用 gguf 格式的,請參考唐鳳的這份 repo
這邊用 q4_0 做測試,看起來輸出是沒有問題,可能跟套件版本有關係

# CMAKE_ARGS="-DLLAMA_CUBLAS=on" pip install llama_cpp_python==0.2.6
# pip install langchain==0.0.298

from langchain.callbacks.manager import CallbackManager
from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler
from langchain.llms import LlamaCpp

# Callbacks support token-wise streaming
callback_manager = CallbackManager([StreamingStdOutCallbackHandler()])

# load Llama-2 model
llm = LlamaCpp(
    model_path="/path/to/Taiwan-LLaMa-13b-1.0.Q4_0.gguf",
    n_gpu_layers=100,
    n_batch=8,
    n_ctx=512,
    temperature=0.1,
    max_tokens=512,
    callback_manager=callback_manager,
)

# response = run_simple_qa(llm, query)
prompt_template = """A chat between a curious user and an artificial intelligence assistant. The assistant gives helpful, detailed, and polite answers to the user's questions. USER: {} ASSISTANT:"""
prompt = prompt_template.format("什麼是深度學習?")
response = llm(prompt)
print(response)

image

Edit: 剛剛測試 gguf q6_k 結果也是沒問題的

image

感謝!