mlc-llm on WSLでモデルの変換を行う
これまでのあらすじ
mlc-llmという、色々な環境でLLM推論をさせることができるプロジェクトがある。
先日、このmlc-llmの中の「web-llm」という、ブラウザで推論させる技術での推論を試した。 前回の記事では推論までは成功したが、モデルの変換をWindowsで行うことに失敗したので、今回はWSL上で環境構築を行い、mlcモデルへの変換を実施、mlc-llm上で推論させることを目標とする。環境構築
tvmのインストール
インストール確認のためにpython -c "import tvm; print(tvm.__file__)"
を実施、以下エラーが発生。
OSError: libnvrtc.so.12: cannot open shared object file: No such file or directory
cudaの問題であることがわかったので、これに従ってcudaを再度使えるようにするnvcc --version
でnvccのpathが通っていることを確認し、再度挑戦。
python -c "import tvm; print(tvm.__file__)"
/home/saldra/mlc-llm/.venv/lib/python3.10/site-packages/tvm/__init__.py
いけた。以下も確認する
python -c "import tvm; print(tvm._ffi.base._LIB)"
コンパイル
次にコンパイルしてみる
python -m mlc_llm.build --hf-path togethercomputer/RedPajama-INCITE-Chat-3B-v1 --target cuda --quantization q4f16_1
以下のエラーが発生
No such file or directory: 'nvcc'
venvにactivateしたらnvccのパスが通らなくなっていることを確認。同様の人が解決策を置いてくれていた。export PATH=/usr/local/cuda/bin:$PATH
すれば良さそう。やってみたらnvcc読み込めた。
もう一度コンパイルしたらエラー。
File "/home/saldra/mlc-llm/.venv/lib/python3.10/site-packages/torch/serialization.py", line 815, in load
return _legacy_load(opened_file, map_location, pickle_module, **pickle_load_args)
File "/home/saldra/mlc-llm/.venv/lib/python3.10/site-packages/torch/serialization.py", line 1033, in _legacy_load
magic_number = pickle_module.load(f, **pickle_load_args)
_pickle.UnpicklingError: invalid load key, 'v'.
issueを漁ったところ、git-lfsがないとそうなるらしい。
pip install git-lfs
rm -rf dist
python -m mlc_llm.build --hf-path togethercomputer/RedPajama-INCITE-Chat-3B-v1 --target cuda --quantization q4f16_1
全然反応がないように見えるが、根気よく待つ。
できたっぽいので、 ls dist/RedPajama-INCITE-Chat-3B-v1-q4f16_1
で確認する
RedPajama-INCITE-Chat-3B-v1-q4f16_1-cuda.so mod_cache_before_build.pkl params
推論
mlc_chatで試してみる。pip install --pre -U -f https://mlc.ai/wheels mlc-chat-nightly-cu122 mlc-ai-nightly-cu122
test_inference.py
from mlc_chat import ChatModule
from mlc_chat.callback import StreamToStdout
cm = ChatModule(model="dist/RedPajama-INCITE-Chat-3B-v1-q4f16_1/params",device="cuda")
cm.generate(prompt="What is the meaning of life?", progress_callback=StreamToStdout(callback_interval=2))
きちんと動いたことが確認できた
The meaning of life is a philosophical question that has been discussed since ancient times. The short answer is that there is no single meaning of life, as each life has different purposes and values. However, there are general themes and ideas that have been proposed as possible meanings of life, such as the pursuit of happiness, the search for truth, and the experience of awe.
おまけ
試行錯誤中、torchのバージョンを下げている
pip install --upgrade torch==2.0.0 --index-url https://download.pytorch.org/whl/cu118
Discussion