環境情報と構築背景
環境: MacBook Pro M2 Max / Mem 32G / OS: Sequoia 15.0.1
https://qiita.com/2626/items/da7811c8b044f5f04927
こちらの記事を参考にさせていただき、実行した結果、2つのエラーに遭遇
1
ERROR:root:Error occurred while running command:
Command '['cmake', '--build', 'build', '--config', 'Release']'
returned non-zero exit status 2., check details in logs/compile.log
2
ERROR:root:Error occurred while running command: Command '['/usr/local/bin/python', 'utils/convert-hf-to-gguf-bitnet.py', 'models/Llama3-8B-1.58-100B-tokens', '--outtype', 'f32']' died with <Signals.SIGKILL: 9>., check details in logs/convert_to_f32_gguf.log
解決1: 不足している標準ライブラリの追記
結論: utils/codegen_ti1.py に #include <cstdlib> と #include <cstring> を追記する
下記関数が見つけられないエラーが発生していた。
posix_memalign
free
memset
これらは、
#include <cstdlib>
#include <cstring>
で定義されている。
対象のヘッダに上記が指定されていないことが原因のよう。
setup_env.pyを確認すると、ローカルから bitnet-lut-kernels-tl1.h をコピーしてビルドをしているようで、今回は
elif get_model_name() == "Llama3-8B-1.58-100B-tokens":
run_command([sys.executable, "utils/codegen_tl1.py", "--model", "Llama3-8B-1.58-100B-tokens", "--BM", "256,128,256,128", "--BK", "128,64,128,64", "--bm", "32,64,32,64"], log_step="codegen")
こちらの条件を通過していることが確認できた。
utils/codegen_ti1.pyを確認すると、
#include <cstdlib>\n\
#include <cstring>\n\
が含まれていないことがわかったので、追記。
def gen_ctor_code():
kernel_code = "\n\
#include <stddef.h>\n\
#include <cstdlib>\n\
#include <cstring>\n\
#include \"ggml-bitnet.h\"\n\
:
:
解決2:
結論: メモリ不足のため、Docker desktopの Memory limitを最大に。
Signals.SIGKILL: 9 は、経験上だいたいメモリ不足なので、Docker desktopのメモリを24Gに引き上げてみたが、解決せず、32Gに設定したところ、解決し、
INFO:root:GGUF model saved at models/Llama3-8B-1.58-100B-tokens/ggml-model-i2_s.gguf
ggufファイルが生成できた。
結果
これらの問題が解決でき、
python run_inference.py -m models/Llama3-8B-1.58-100B-tokens/ggml-model-i2_s.gguf -p "Daniel went back to the the the garden. Mary travelled to the kitchen. Sandra journeyed to the kitchen. Sandra went to the hallway. John went to the bedroom. Mary went back to the garden. Where is Mary?\nAnswer:" -n 6 -temp 0
:
:
Daniel went back to the the the garden. Mary travelled to the kitchen. Sandra journeyed to the kitchen. Sandra went to the hallway. John went to the bedroom. Mary went back to the garden. Where is Mary?
Answer: Mary is in the garden.
llama_perf_sampler_print: sampling time = 0.33 ms / 54 runs ( 0.01 ms per token, 164634.15 tokens per second)
llama_perf_context_print: load time = 3506.26 ms
llama_perf_context_print: prompt eval time = 5601.12 ms / 48 tokens ( 116.69 ms per token, 8.57 tokens per second)
llama_perf_context_print: eval time = 586.33 ms / 5 runs ( 117.27 ms per token, 8.53 tokens per second)
llama_perf_context_print: total time = 6188.78 ms / 53 tokens
正常動作が確認できた。