視頻中,我們將深入了解利用GPU加速在Orange Pi5上跑LLMs的精彩世界。最近知乎上的一篇文章《利用GPU加速,在Orange Pi上跑LLMs》引起了我們的注意,這篇文章主要展示了GPU加速的LLM在嵌入式設(shè)備上以合適的速度順利運行。具體來說,是在Orange Pi 5(8G)上,作者通過機器學習編譯(MLC)技術(shù),實現(xiàn)了Llama2-7b以2.5 toks/sec的速度運行,RedPajama-3b以5 toks/sec運行。此外,還在16GB版本的Orange Pi 5上以1.5 tok/sec的速度運行Llama-2 13b模型。
下面我們看看他們是如何做到的:
背景
開放語言模型的進步已經(jīng)催生了跨問題回答、翻譯和創(chuàng)意任務(wù)的創(chuàng)新。雖然當前的解決方案需要高端的桌面GPU甚至服務(wù)器級別的GPU來實現(xiàn)滿意的性能。但為了使LLM日常使用,我們想了解我們?nèi)绾卧诹畠r的嵌入式設(shè)備上部署它們。
許多嵌入式設(shè)備配備了移動GPU(例如Mali GPU)可以用來加速LLM的運行速度。在這篇文章中,我們選擇了Orange Pi 5,這是一個基于RK3588的開發(fā)板,與Raspberry Pi相似,但也配備了更強大的Mali-G610 GPU。這篇文章總結(jié)了我們首次嘗試利用機器學習編譯,并為該設(shè)備提供了開箱即用的GPU加速。
面向Mali GPU的機器學習編譯
機器學習編譯(MLC)是一種新興技術(shù),它自動編譯和優(yōu)化機器學習工作負載,并將編譯后的工作負載部署到廣泛的后端。在寫作時,基于Apache TVM Unity,MLC支持的平臺包括瀏覽器(WebGPU, WASM)、NVIDIA GPU(CUDA)、AMD GPU(ROCm, Vulkan)、Intel GPU(Vulkan)、iOS和MacBooks(Metal)、Android(OpenCL)以及Mali GPU(本文)。
基于通用機器學習編譯實現(xiàn)Mali代碼生成
MLC是建立在Apache TVM Unity之上的,這是一個用于在不同硬件和后端上編譯機器學習模型的通用軟件棧。為了將LLM編譯到Mali GPU上,我們復用了所有現(xiàn)有的編譯流程,沒有進行任何代碼優(yōu)化。更具體地說,我們成功地部署了Llama-2和RedPajama模型,采取了以下步驟:
·復用了模型優(yōu)化步驟,包括量化、融合、布局優(yōu)化等;
·復用了在TVM TensorIR中的定義的通用GPU內(nèi)核優(yōu)化空間,并將其重新運用在到Mali GPU;
·復用了基于TVM的OpenCL代碼生成后端,并將其重新運用在到Mali GPU;
·復用了現(xiàn)有的用戶界面,包括Python API、CLI和REST API。
運行方法
本節(jié)提供了一個分步運行指南,以便您可以在自己的Orange Pi設(shè)備上嘗試它。這里我們使用RedPajama-INCITE-Chat-3B-v1-q4f16_1作為運行示例。您可以用Llama-2-7b-chat-hf-q4f16_1或Llama-2-13b-chat-hf-q4f16_1(需要16GB的板)來替換它。
準備工作
請首先按照這里的指示,為RK3588板設(shè)置OpenCL驅(qū)動程序。然后從源代碼克隆MLC-LLM,并下載權(quán)重和預構(gòu)建的庫。
# clone mlc-llm from GitHub
git clone --recursive https://github.com/mlc-ai/mlc-llm.git && cd mlc-llm
# Download prebuilt weights and libs
git lfs install
mkdir -p dist/prebuilt && cd dist/prebuilt
git clone https://github.com/mlc-ai/binary-mlc-llm-libs.git lib
git clonehttps://huggingface.co/mlc-ai/mlc-chat-RedPajama-INCITE-Chat-3B-v1-q4f16_1
cd ../../..
使用CLI
從源代碼編譯mlc_llm_cli
cd mlc-llm/
# create build directory
mkdir -p build && cd build
# generate build configuration
python3 ../cmake/gen_cmake_config.py
# build `mlc_chat_cli`
cmake .. && cmake --build . --parallel $(nproc) && cd ..
驗證是否編譯成功
# expected to see `mlc_chat_cli`, `libmlc_llm.so` and `libtvm_runtime.so`
ls -l ./build/
# expected to see help message
./build/mlc_chat_cli --help
使用mlc_llm_cli運行LLM
./build/mlc_chat_cli --local-id RedPajama-INCITE-Chat-3B-v1-q4f16_1 –device mali
CLI運行截圖
使用Python API
編譯TVM runtime(無需編譯完整TVM編譯器)
# clone from GitHub
git clone --recursive https://github.com/mlc-ai/relax.git tvm_unity && cd tvm_unity/
# create build directory
mkdir -p build && cd build
# generate build configuration
cp ../cmake/config.cmake . && echo "set(CMAKE_BUILD_TYPE RelWithDebInfo)\nset(USE_OPENCL ON)" >> config.cmake
# build `mlc_chat_cli`
cmake .. && cmake --build . --target runtime --parallel $(nproc) && cd ../..
設(shè)置PYTHONPATH(可按需添加到bashrc或zshrc)
export TVM_HOME=$(pwd)/tvm_unity
export MLC_LLM_HOME=$(pwd)/mlc-llm
export PYTHONPATH=$TVM_HOME/python:$MLC_LLM_HOME/python:${PYTHONPATH}
運行下列Python腳本
from mlc_chat import ChatModule
from mlc_chat.callback import StreamToStdout
cm = ChatModule(model="RedPajama-INCITE-Chat-3B-v1-q4f16_1")
# Generate a response for a given prompt
output = cm.generate(
prompt="What is the meaning of life?",
progress_callback=StreamToStdout(callback_interval=2),)
# Print prefill and decode performance statistics
print(f"Statistics: {cm.stats()}\n")
評論區(qū)Hihg翻了!
這篇文章同時發(fā)表 Hacker News。在人工智能評論區(qū),大家的討論熱鬧非凡,令人目不暇接。他們熱烈地討論Orange Pi 5的硬件選項和可擴展性,感嘆如此強大的模型,如此實惠的價格,將改變游戲規(guī)則,認為這一突破將為預算有限的人工智能愛好者帶來了新的可能性。
“這一功能強大的工具使得在Orange Pi 5等設(shè)備上充分發(fā)揮人工智能的潛力變得前所未有的簡單。對于開發(fā)者和業(yè)余愛好者來說,這都是一個改變游戲規(guī)則的工具?!?/p>
“通過 GPU加速語言模型編譯,Orange Pi 5已被證明是一款經(jīng)濟實惠的人工智能利器。這款設(shè)備擁有令人驚嘆的速度,能以極低的成本運行高性能模型,正在徹底改變?nèi)斯ぶ悄茴I(lǐng)域?!?/p>
我們欣喜地可以看到,Orange Pi 5正在以其強大的人工智能能力讓越來越多的人工智能愛好者加入到創(chuàng)新、創(chuàng)意的世界,不斷進行新的實踐和探索。
-
gpu
+關(guān)注
關(guān)注
28文章
4729瀏覽量
128890 -
人工智能
+關(guān)注
關(guān)注
1791文章
47183瀏覽量
238246 -
開發(fā)板
+關(guān)注
關(guān)注
25文章
5032瀏覽量
97371
發(fā)布評論請先 登錄
相關(guān)推薦
評論