在2GB DAYU200上本地部署大語言模型

2024.02.14

實現想法和步驟

移植輕量級LLM模型推理框架InferLLM到OpenHarmony標準系統,編譯出能在OpenHarmony運作的二進位產物。 (InferLLM 是一個簡單且有效率的LLM CPU 推理框架,可以本地部署LLM 中的量化模型)

使用OpenHarmony NDK來編譯OpenHarmony上的InferLLM可執行檔(具體使用OpenHarmony lycium 交叉編譯框架,然後編寫一些腳本。然後把其存放在tpc_c_cplusplusSIG倉庫。)

在DAYU200上本地部署大語言模型

編譯取得InferLLM三方函式庫編譯產物

下載OpenHarmony sdk,下載位址:

http://ci.openharmony.cn/workbench/cicd/dailybuild/dailyList

下載本倉庫

git clone https://gitee.com/openharmony-sig/tpc_c_cplusplus.git --depth=1
  • 1.
# 设置环境变量
export OHOS_SDK=解压目录/ohos-sdk/linux  # 请替换为你自己的解压目录
 
cd lycium
./build.sh InferLLM
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

取得InferLLM三方庫頭檔及產生的庫 

在tpc_c_cplusplus/thirdparty/InferLLM/目錄下會產生InferLLM-405d866e4c11b884a8072b4b30659c63555be41d目錄,該目錄下存在已編譯完成的32位元和64位元三方函式庫。 (相關編譯結果不會被打包進入lycium目錄下的usr目錄)。

InferLLM-405d866e4c11b884a8072b4b30659c63555be41d/arm64-v8a-build  
InferLLM-405d866e4c11b884a8072b4b30659c63555be41d/armeabi-v7a-build
  • 1.
  • 2.

將編譯產物和模型檔推送至​​開發板運行

  • 下載模型檔案:https://huggingface.co/kewin4933/InferLLM-Model/tree/main
  • 將編譯InferLLM產生的llama可執行檔、OpenHarmony sdk中的libc++_shared.so、下載好的模型檔chinese-alpaca-7b-q4.bin 打包成資料夾llama_file
# 将llama_file文件夹发送到开发板data目录
hdc file send llama_file /data
  • 1.
  • 2.
# hdc shell 进入开发板执行
cd data/llama_file

# 在2GB的dayu200上加swap交换空间
# 新建一个空的ram_ohos文件
touch ram_ohos
# 创建一个用于交换空间的文件(8GB大小的交换文件)
fallocate -l 8G /data/ram_ohos
# 设置文件权限,以确保所有用户可以读写该文件:
chmod 777 /data/ram_ohos
# 将文件设置为交换空间:
mkswap /data/ram_ohos
# 启用交换空间:
swapon /data/ram_ohos

# 设置库搜索路径
export LD_LIBRARY_PATH=/data/llama_file:$LD_LIBRARY_PATH

# 提升rk3568cpu频率
# 查看 CPU 频率
cat /sys/devices/system/cpu/cpu*/cpufreq/cpuinfo_cur_freq

# 查看 CPU 可用频率(不同平台显示的可用频率会有所不同)
cat /sys/devices/system/cpu/cpufreq/policy0/scaling_available_frequencies

# 将 CPU 调频模式切换为用户空间模式,这意味着用户程序可以手动控制 CPU 的工作频率,而不是由系统自动管理。这样可以提供更大的灵活性和定制性,但需要注意合理调整频率以保持系统稳定性和性能。
echo userspace > /sys/devices/system/cpu/cpufreq/policy0/scaling_governor

# 设置rk3568 CPU 频率为1.9GHz
echo 1992000 > /sys/devices/system/cpu/cpufreq/policy0/scaling_setspeed

# 执行大语言模型
chmod 777 llama
./llama -m chinese-alpaca-7b-q4.bin -t 4
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.

移植InferLLM三方程式庫在OpenHarmmony設備rk3568上部署大語言模型實現人機對話。最後運作效果有些慢,跳出人機對話框也有些慢,請耐心等待。