OpenHarmony开发者论坛

标题: 在2GB DAYU200上本地部署大语言模型 [打印本页]

作者: 润开鸿_贾佳豪    时间: 2023-12-4 17:59
标题: 在2GB DAYU200上本地部署大语言模型
[md]本文将第二届OpenHarmony技术大会上展示的《在OpenHarmony本地部署大语言模型》成果开源,开源地址:[InferLLM三方库](https://gitee.com/openharmony-si ... cs/hap_integrate.md)

在2GB的DAYU200开发板上部署alpaca模型,实现OpenHarmony设备本地部署语言模型。(注意:本地部署语言模型对设备RAM要求较高需要4GB左右,加上swap交换空间就可以)

## 1.实现思路和步骤

- 1.移植轻量级LLM模型推理框架[InferLLM](https://github.com/MegEngine/InferLLM)到OpenHarmony标准系统,编译出能在OpenHarmony运行的二进制产物。
  - InferLLM 是一个简单高效的 LLM CPU 推理框架,可以本地部署 LLM 中的量化模型
- 2.使用OpenHarmony NDK来编译OpenHarmony上的[InferLLM](https://github.com/MegEngine/InferLLM)可执行文件
  - 具体使用OpenHarmony [lycium 交叉编译框架](https://gitee.com/openharmony-si ... /tree/master/lycium),然后编写一些脚本。然后把其存放在[tpc_c_cplusplus](https://gitee.com/openharmony-sig/tpc_c_cplusplus)SIG仓库。

## 2.在2GB DAYU200上本地部署大语言模型步骤

### 2.1 编译获取InferLLM三方库编译产物

1.下载OpenHarmony sdk,下载地址:http://ci.openharmony.cn/workbench/cicd/dailybuild/dailyList

2.下载本仓库

```
git clone https://gitee.com/openharmony-sig/tpc_c_cplusplus.git --depth=1
```

```
# 设置环境变量
export OHOS_SDK=解压目录/ohos-sdk/linux  # 请替换为你自己的解压目录

cd lycium
./build.sh InferLLM
```

- 3.获取InferLLM三方库头文件及生成的库
  在tpc_c_cplusplus/thirdparty/InferLLM/目录下会生成InferLLM-405d866e4c11b884a8072b4b30659c63555be41d目录,该目录下存在已编译完成的32位和64位三方库。(相关编译结果不会被打包进入lycium目录下的usr目录)

  ```
  InferLLM-405d866e4c11b884a8072b4b30659c63555be41d/arm64-v8a-build  
  InferLLM-405d866e4c11b884a8072b4b30659c63555be41d/armeabi-v7a-build
  ```
- 4.当然要是觉的以上步骤来获取编译产物麻烦,可以前往该地址下载。

  - [32位llama](https://gitee.com/from-north-to- ... abi-v7a-build/llama)
  - [64位llama](https://gitee.com/from-north-to- ... m64-v8a-build/llama)

### 2.2 将编译产物和模型文件推送至开发板运行

1.下载模型文件:[chinese-alpaca-7b-q4.bin](https://huggingface.co/kewin4933/InferLLM-Model/tree/main)

2.将编译InferLLM生成的 `llama可执行文件`、OpenHarmony sdk中的 `libc++_shared.so`、下载好的模型文件 `chinese-alpaca-7b-q4.bin` 打包成文件夹 llama_file

```
# 将llama_file文件夹发送到开发板data目录
hdc file send llama_file /data
```

```
# 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_fileLD_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
```

移植InferLLM三方库在OpenHarmmony设备rk3568上部署大语言模型实现人机对话。最后运行效果有些慢,跳出人机对话框也有些慢,请耐心等待。

![image.png](https://dl-harmonyos.51cto.com/i ... rocess=image/resize,w_820,h_2079)
[/md]




欢迎光临 OpenHarmony开发者论坛 (https://forums.openharmony.cn/) Powered by Discuz! X3.5