香橙派5部署chatglm2-6b模型

香橙派5部署chatglm2-6b模型

环境信息:

部署服务器:orangepi 5 16G版本

系统版本:Ubuntu 22.04.3 LTS

参考文档:

利用GPU加速,在Orange Pi上跑LLMs : https://zhuanlan.zhihu.com/p/650110025

遥遥领先!手把手带你用国产香橙派部署清华AI语言模型,比肩GPT,树莓派做得到吗?:https://zhuanlan.zhihu.com/p/663853222

一、基础环境调整

(1)替换apt下载源
#更新软件包
apt update 
#安装vim
apt install vim -y  

#备份原sources.list文件
cp /etc/apt/sources.list /etc/apt/sources.list_bak
vim /etc/apt/sources.list
#插入以下信息
deb http://repo.huaweicloud.com/ubuntu-ports/ jammy main restricted universe multiverse
#deb-src http://repo.huaweicloud.com/ubuntu-ports/ jammy main restricted universe multiverse

deb http://repo.huaweicloud.com/ubuntu-ports/ jammy-security main restricted universe multiverse
#deb-src http://repo.huaweicloud.com/ubuntu-ports/ jammy-security main restricted universe multiverse

deb http://repo.huaweicloud.com/ubuntu-ports/ jammy-updates main restricted universe multiverse
#deb-src http://repo.huaweicloud.com/ubuntu-ports/ jammy-updates main restricted universe multiverse

deb http://repo.huaweicloud.com/ubuntu-ports/ jammy-backports main restricted universe multiverse
#deb-src http://repo.huaweicloud.com/ubuntu-ports/ jammy-backports main restricted universe multiverse

#更新软件包
apt update && apt upgrade -y 
#安装cmake
apt install cmake -y

二、安装miniforge

(1)、获取miniforge安装包

#安装wget
apt install wget -y

#方法1:不使用科学上网下载速度可能较慢
wget -e https://github.com/conda-forge/miniforge/releases/download/23.3.1-1/Miniforge3-Linux-aarch64.sh
#方法2:本地下载完成后上传scp命令或使用桌面端Winscp等
scp -p22 username@ip:物理机目录/Miniforge3-Linux-aarch64.sh ~/

在这里插入图片描述

图为方法2

(2)、安装miniforge

cd ~/
sh Miniforge3-Linux-aarch64.sh

安装过程:

在这里插入图片描述

输入回车

在这里插入图片描述

q退出即可

在这里插入图片描述

输入yes

在这里插入图片描述

Miniforge3 will now be installed into this location: #Miniforge3现在将安装到此位置:
/root/miniforge3

  - Press ENTER to confirm the location		#-按ENTER确认位置
  - Press CTRL-C to abort the installation	#-按CTRL-C中止安装
  - Or specify a different location below	#-或者在下面指定其他位置

想省事可以直接回车,如果想安装到其他目录输入具体目录。

在这里插入图片描述

安装完成后:

#激活一下conda的python环境
source ~/.bashrc 
conda -V
conda 23.3.1

三、下载llvm

(1)、下载压缩包

#方式1:下载较慢
wget -e https://github.com/llvm/llvm-project/releases/download/llvmorg-17.0.2/clang+llvm-17.0.2-aarch64-linux-gnu.tar.xz
#方式2:本地下载完成后上传scp命令或使用桌面端Winscp等
scp -p22 username@ip:物理机目录/clang+llvm-17.0.2-aarch64-linux-gnu.tar.xz ~/

#解压
tar -xvf clang+llvm-17.0.2-aarch64-linux-gnu.tar.xz

四、下载mlc-ai

(1)、获取项目代码

#方式1:下载较慢
git clone --recursive https://github.com/mlc-ai/relax.git tvm_unity && cd tvm_unity/
#方式2:同之前,直接上传压缩包
scp -p22 username@ip:物理机目录/tvm_utity.tar.gz ~/
tar -zxvf tvm_utity.tar.gz

(2)、编译

cd tvm_unity/
mkdir -p build && cd build
cp ../cmake/config.cmake .

vi config.cmake
set(CMAKE_BUILD_TYPE RelWithDebInfo) #这一项在文件中没有,需要添加
set(USE_OPENCL ON) #这一项在文件中可以找到,需要修改
set(HIDE_PRIVATE_SYMBOLS ON) #这一项在文件中没有,需要添加
set(USE_LLVM /root/clang+llvm-17.0.2-aarch64-linux-gnu/bin/llvm-config) #这一项在文件中可以找到,需要修改

#安装编译环境
apt install g++ zlib1g-dev -y
apt-get install libvcflib-tools

cmake ..
#开始编译tvm
make -j8 

(3)、python依赖安装

cd ../python
apt install pip git -y
#安装依赖
pip3 install --user . 
#如果直接安装报错,可以指定python安装依赖地址
pip3 install --user . -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

(4)、添加环境变量

vim /root/.bashrc
#添加以下环境变量
export PATH="$PATH:/root/.local/bin"
#生效环境变量
source /root/.bashrc
#测试安装
tvmc
#输出结果
usage: tvmc [--config CONFIG] [-v] [--version] [-h] {run,tune,compile} ...

TVM compiler driver

options:
  --config CONFIG     configuration json file
  -v, --verbose       increase verbosity
  --version           print the version and exit
  -h, --help          show this help message and exit.

commands:
  {run,tune,compile}
    run               run a compiled module
    tune              auto-tune a model
    compile           compile a model.

TVMC - TVM driver command-line interface

五、安装mlc-llm

(1)、下载源码

#方式1:下载较慢
git clone --recursive https://github.com/mlc-ai/mlc-llm.git && cd mlc-llm
#方式2:本地下载完成后上传scp命令或使用桌面端Winscp等
scp -p22 username@ip:物理机目录/mlc-llm.tar.gz ~/

#解压
tar -xvf mlc-llm.tar.gz
cd mlc-llm/

(2)、安装python依赖

cd ~/mlc-llm/
pip3 install --user .
#如果直接安装异常,可以指定python安装依赖地址
pip3 install --user . -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
#安装完成后验证
python3 -m mlc_llm.build –help
#输出结果
usage: build.py [-h] [--model MODEL] [--hf-path HF_PATH]
                [--quantization {autogptq_llama_q4f16_0,autogptq_llama_q4f16_1,q0f16,q0f32,q3f16_0,q3f16_1,q4f16_0,q4f16_1,q4f16_2,q4f16_ft,q4f32_0,q4f32_1,q8f16_ft,q8f16_1}] [--max-seq-len MAX_SEQ_LEN]
                [--target TARGET] [--reuse-lib REUSE_LIB] [--artifact-path ARTIFACT_PATH] [--use-cache USE_CACHE] [--convert-weight-only] [--build-model-only] [--debug-dump] [--debug-load-script]
                [--llvm-mingw LLVM_MINGW] [--cc-path CC_PATH] [--system-lib] [--sep-embed] [--use-safetensors] [--enable-batching] [--no-cutlass-attn] [--no-cutlass-norm] [--no-cublas] [--use-cuda-graph]
                [--num-shards NUM_SHARDS] [--use-flash-attn-mqa] [--pdb] [--use-vllm-attention]
build.py: error: unrecognized arguments: –help

六、下载chatglm2-6b模型

(1)、下载模型

#创建目录,用于存放模型
mkdir -p dist/models && cd dist/models
#方法1:下载模型,需要科学上网
git lfs install && git clone https://huggingface.co/THUDM/chatglm2-6b
#方法2:本地上传
scp -p22 username@ip:物理机目录/mlc-llm.tar.gz ~/
tar -zxvf chatglm2-6b.tar.gz 

七、安装OpenCL驱动

(1)、安装驱动

#步骤安装教程地址,需要科学上网
https://llm.mlc.ai/docs/install/gpu.html#orange-pi-5-rk3588-based-sbc
#步骤内容
#Download and install the Ubuntu 22.04 for your board from here
#Download and install libmali-g610.so
cd /usr/lib && sudo wget https://github.com/JeffyCN/mirrors/raw/libmali/lib/aarch64-linux-gnu/libmali-valhall-g610-g6p0-x11-wayland-gbm.so

#Check if file mali_csffw.bin exist under path /lib/firmware, if not download it with command:
cd /lib/firmware && sudo wget https://github.com/JeffyCN/mirrors/raw/libmali/firmware/g610/mali_csffw.bin

#Download OpenCL ICD loader and manually add libmali to ICD
apt update
apt install mesa-opencl-icd
mkdir -p /etc/OpenCL/vendors
echo "/usr/lib/libmali-valhall-g610-g6p0-x11-wayland-gbm.so" | sudo tee /etc/OpenCL/vendors/mali.icd

#Download and install libOpenCL
apt install ocl-icd-opencl-dev

#Download and install dependencies for Mali OpenCL
apt install libxcb-dri2-0 libxcb-dri3-0 libwayland-client0 libwayland-server0 libx11-xcb1

#Download and install clinfo to check if OpenCL successfully installed
apt install clinfo

#To verify you have correctly installed OpenCL runtime and Mali GPU driver, run clinfo in command line and see if you can get the GPU information. You are expect to see the following information:

clinfo
arm_release_ver: g13p0-01eac0, rk_so_ver: 3
Number of platforms                               2
   Platform Name                                   ARM Platform
   Platform Vendor                                 ARM
   Platform Version                                OpenCL 2.1 v1.g6p0-01eac0.2819f9d4dbe0b5a2f89c835d8484f9cd
   Platform Profile                                FULL_PROFILE
   ...

#注:以上下载文件可以手动上传物理机传入容器内,放置指定目录即可

八、安装rust

(1)安装

#下载安装rust
#方法1
apt install curl -y
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
#方法2
apt install rustc cargo -y
#添加环境变量
vim /root/.bashrc
#添加内容
export PATH="$PATH:/root/.cargo/bin"
source ~/.bashrc 

rustc --version
#输出
rustc 1.66.1 (90743e729 2023-01-10) (built from a source tarball)

九、编译模型

(1)、编译模型

#切换到mlc-llm目录
cd /root/mlc-llm
#chatglm2-6b根据model目录下信息自行修改
python3 -m mlc_llm.build --model chatglm2-6b --target opencl --max-seq-len 32768 --quantization q8f16_1 
#编译完成会生成一个so文件
ll dist/chatglm2-6b-q8f16_1/chatglm2-6b-q8f16_1-opencl.so
-rwxr-xr-x 1 root root 3065776 Nov 10 15:27 dist/chatglm2-6b-q8f16_1/chatglm2-6b-q8f16_1-opencl.so*

#在/root/mlc-llm目录下执行
mkdir -p build && cd build 
cmake .. && cmake --build . --parallel $(nproc) && cd ..

#编译完成后
ls -l ./build/
total 89208
-rw-r--r--  1 root root    26782 Nov 10 15:31 CMakeCache.txt
drwxr-xr-x 11 root root     4096 Nov 10 15:34 CMakeFiles
-rw-r--r--  1 root root     6529 Nov 10 15:31 cmake_install.cmake
-rw-r--r--  1 root root     3095 Nov 10 15:31 CPackConfig.cmake
-rw-r--r--  1 root root     3387 Nov 10 15:31 CPackSourceConfig.cmake
-rw-r--r--  1 root root 16976604 Nov 10 15:34 libmlc_llm.a
-rwxr-xr-x  1 root root 35807824 Nov 10 15:34 libmlc_llm_module.so
-rwxr-xr-x  1 root root 35807824 Nov 10 15:34 libmlc_llm.so
-rw-r--r--  1 root root    23948 Nov 10 15:31 Makefile
-rwxr-xr-x  1 root root  2659392 Nov 10 15:34 mlc_chat_cli
drwxr-xr-x  6 root root     4096 Nov 10 15:34 tokenizers
drwxr-xr-x  3 root root     4096 Nov 10 15:34 tvm
-rw-r--r--  1 root root     1886 Nov 10 15:31 TVMBuildOptions.txt

./build/mlc_chat_cli –help
Maximum number of positional arguments exceeded
Usage: mlc_chat_cli [--help] [--version] [--model VAR] [--model-lib-path VAR] [--device VAR] [--evaluate] [--eval-prompt-len VAR] [--eval-gen-len VAR]

MLCChat CLI is the command line tool to run MLC-compiled LLMs out of the box.
Note: the --model argument is required. It can either be the model name with its quantization scheme or a full path to the model folder. In the former case, the provided name will be used to search for the model folder over possible paths. --model-lib-path argument is optional. If unspecified, the --model argument will be used to search for the library file over possible paths.

Optional arguments:
  -h, --help            shows help message and exits 
  -v, --version         prints version information and exits 
  --model               [required] the model to use 
  --model-lib-path      [optional] the full path to the model library file to use 
  --device              [default: "auto"]
  --evaluate       
  --eval-prompt-len     [default: 128]
  --eval-gen-len        [default: 1024]

#运行模型
./build/mlc_chat_cli --model chatglm2-6b-q8f16_1 --device opencl
#输出
Use MLC config: "/root/mlc-llm/dist/chatglm2-6b-q8f16_1/params/mlc-chat-config.json"
Use model weights: "/root/mlc-llm/dist/chatglm2-6b-q8f16_1/params/ndarray-cache.json"
Use model library: "/root/mlc-llm/dist/chatglm2-6b-q8f16_1/chatglm2-6b-q8f16_1-opencl.so"
You can use the following special commands:
  /help               print the special commands
  /exit               quit the cli
  /stats              print out the latest stats (token/sec)
  /reset              restart a fresh chat
  /reload [model]  reload model `model` from disk, or reload the current model if `model` is not specified

Loading model...
arm_release_ver of this libmali is 'g6p0-01eac0', rk_so_ver is '7'.
Loading finished
Running system prompts...
System prompts finished
问: 你是谁
答: 我是一个名为 ChatGLM2-6B 的人工智能助手,是基于清华大学 KEG 实验室和智谱 AI 公司于 2023 年共同训练的语言模型开发的。我的任务是针对用户的问题和要求提供适当的答复和支持。
问: /stats  
prefill: 0.7 tok/s, decode: 1.9 tok/s

十、代码调用demo

(1)、测试代码

vi ~/.bashrc
#添加环境变量,$(pwd)替换为安装目录
export TVM_HOME=$(pwd)/tvm_unity
export MLC_LLM_HOME=$(pwd)/mlc-llm
export PYTHONPATH=$TVM_HOME/python:$MLC_LLM_HOME/python:${PYTHONPATH}
#生效环境变量
source ~/.bashrc

#在/root/mlc-llm目录下创建demo.py(调用模型需要),插入以下内容
from mlc_chat import ChatModule
from mlc_chat.callback import StreamToStdout
cm = ChatModule(model="chatglm2-6b-q8f16_1")

# Generate a response for a given prompt
output = cm.generate(
           prompt="你是谁?",
              progress_callback=StreamToStdout(callback_interval=2),
              )

# Print prefill and decode performance statistics
print(f"Statistics: {cm.stats()}\n")

#注,部分python依赖可能需要手动安装
python demo.py 
#测试输出
arm_release_ver of this libmali is 'g6p0-01eac0', rk_so_ver is '7'.
我是一个名为 ChatGLM2-6B 的人工智能助手,是基于清华大学 KEG 实验室和智谱 AI 公司于 2023 年共同训练的语言模型开发的。我的任务是针对用户的问题和要求提供适当的答复和支持。
Statistics: prefill: 1.4 tok/s, decode: 2.2 tok/s

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/128451.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

二十三、W5100S/W5500+RP2040树莓派Pico<Web I/O 通过网页控制板载LED灯>

文章目录 1 前言2 简介2 .1 什么是Web?2.2 Web的优点2.3 Web数据交互原理2.4 Web应用场景 3 WIZnet以太网芯片4 HTTP网络设置示例概述以及使用4.1 流程图4.2 准备工作核心4.3 连接方式4.4 主要代码概述4.5 结果演示 5 注意事项6 相关链接 1 前言 Web只是一个静态的文…

java项目之网上跳蚤市场(ssm框架)

项目简介 网上跳蚤市场实现了以下功能: 管理员功能需求 管理员登陆后,主要模块包括首页,个人中心,会员管理,商品分类管理,商品信息管理,求购信息管理,留言板管理,系统管…

JNPF开发平台:加速企业数字化转型,提升业务效率

如今,随着信息化的深入发展,数字化转型已经成为企业生存和发展的关键。为了在竞争激烈的市场中保持领先地位,企业需要快速地适应变化,优化业务流程,并提供优质的用户体验。而在这其中,低代码开发平台JNPF是…

搜款网VVIC商品详情API接口

搜款网VVIC商品详情接口提供了全面的API接口,通过该接口,开发者可以使用商品ID等参数请求API,获取商品的详细信息,如商品标题、描述、价格、库存状态、销售量等。 要使用VVIC商品详情接口,您需要先注册开发者账号并申…

HCIP---VRRP

文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 一. VRRP概述 VRRP---虚拟路由器冗余协议 VRRP(Virtual Router Redundancy Protocol)是一种用于在多个路由器之间创建虚拟路由器的协议。 VRRP使用了一系列协议来实现路…

5+m6A+预后模型+WGCNA,简单又高效,学习下这篇思路吧

今天给同学们分享一篇生信文章“Targeting AURKA in Cancer: molecular mechanisms and opportunities for Cancer therapy”,这篇文章发表在Front Endocrinol (Lausanne)期刊上,影响因子为5.2。 结果解读: 在训练集中,基于3个与…

GC5958低压三相无刷直流驱动芯片,无感,正弦,低压,PWM调速可替代APX9358/茂达

GC5958提供了无传感器的三相无刷直流电机的速度控制的所有电路。正弦波驱动器的方法将是更好的低噪声。控制器功能包括启动电路、反电动势换向控制。脉宽调制) 速度控制。锁定保护和热关断电路GC5958既适合游戏机器,也适用于需要无声驱动的CPU冷却器。它以DFN3x3-10…

麒麟KYLINIOS软件仓库搭建03-软件仓库添加新版本的软件包

原文链接:麒麟KYLINIOS软件仓库搭建03-软件仓库添加新版本的软件包 hello,大家好啊,今天给大家带来麒麟桌面操作系统软件仓库搭建的文章03-软件仓库添加新版本的软件包,本篇文章主要给大家介绍了如何在麒麟桌面操作系统2203-x86版…

嵌入式面试常见问题(三)

1.linux下的proc文件夹是干什么的? 进程信息:/proc文件夹包含有关系统上运行的每个进程的信息。您可以在/proc中找到以进程ID(PID)为名称的子文件夹,每个子文件夹包含有关特定进程的信息,如状态、命令行参数…

【云栖2023】王峰:开源大数据平台3.0技术解读

本文根据2023云栖大会演讲实录整理而成,演讲信息如下: 演讲人:王峰 | 阿里云研究员,阿里云计算平台事业部开源大数据平台负责人 演讲主题:开源大数据平台3.0技术解读 实时化与Serverless是开源大数据3.0时代的必然选…

如何帮助 3D CAD 设计师实现远程办公

当 3D CAD 设计师需要远程办公时,他们可能需要更强的远程软件,以满足他们的专业需求。比如高清画质,以及支持设备重定向、多显示器支持等功能。3D CAD 设计师如何实现远程办公?接下来我们跟随 Platinum Tank Group 的故事来了解一…

Java类和对象(2)

🐵本文继续讲解类和对象相关知识 一、封装 封装就是将对象的属性和实现方法隐藏起来,外部无法获得具体的实现细节,只对外公开接口和对象进行交互,将对象的属性隐藏起来的办法就是用关键字private,被private修饰的成员…

四入进博会,优衣库围绕科技可持续演绎“服装进化论”

11月5日,第六届中国国际进口博览会在上海拉开帷幕。这些年来,进博巨大的平台效应,使其成为各个行业头部品牌的秀场,也持续为消费者、产业链带来惊喜。 今年,也是全球服装界科技知名品牌——优衣库的第四次进博之旅。从…

2023年云计算发展趋势浅析

​​​​​​​ 云计算的概念 云计算是一种通过互联网提供计算资源和服务的模式。它允许用户通过网络访问和使用共享的计算资源,而无需拥有或管理这些资源的物理设备。云计算的核心理念是将计算能力、存储资源和应用程序提供给用户,以便随时随地根据需要…

模型剪枝算法——L1正则化BN层的γ因子

ICCV在2017年刊登了一篇经典论文《 Learning Efficient Convolutional Networks through Network Slimming》。在神经网络的卷积操作之后会得到多个特征图,通过策略突出重要的特征达到对网络瘦身的目的。在该论文中使用的剪枝策略就是稀疏化BN层中的缩放因子 。 Bat…

Navicat16连接不上mysql

博主是因为服务里MySQL没启动, 如果确定自己的数据库正确无误的朋友就可以退出寻找其它解决办法了。 如图,一打开navicat就初始化,啥都没有,也连接不上 1,搜索里搜【服务】找到MySQL, 发现MySQL未启动。点击…

MySQL 数据目录和 InnoDB 表空间补充知识:详细结构

1. 数据目录 在Ubuntu下,MySQL的数据目录为/var/lib/mysql 1.1 数据库在文件系统中的表示 (1)创建数据库时,会在数据目录下创建一个与数据库名同名的子目录。(除了information_schema这个系统数据外) &…

Linux应用开发基础知识——Framebuffer 应用编程(四)

前言: 在 Linux 系统中通过 Framebuffer 驱动程序来控制 LCD。Frame 是帧的意 思,buffer 是缓冲的意思,这意味着 Framebuffer 就是一块内存,里面保存着 一帧图像。Framebuffer 中保存着一帧图像的每一个像素颜色值,假设…

聊点技术|100%降本增效!Bonree ONE 通过 Clickhouse实现了

10月20日,数智融,ONE向新——博睿数据2023秋季产品发布会圆满落幕,全新一代一体化智能可观测平台Bonree ONE 2023秋季正式版焕新发布,重点升级了数据采集、全局拓扑、数据分析、会话回放等多个功能模块,为组织提供了更…

苹果手机发热发烫是什么原因?看完这篇你就知道了!

苹果手机以其卓越的用户体验和优秀的性能得到了广大用户的喜爱和追捧。在日常使用苹果手机时,我们可能会遇到手机发热发烫的情况。那么,苹果手机发热发烫是什么原因呢?小编将为大家解析这一问题的原因,并为您提供相应的解决方案&a…