JittorLLMs macOS Apple Silicon 使用

JittorLLL 计图大模型推理库

  1. 成本低:相比同类框架,本库可大幅降低硬件配置要求(减少80%),没有显卡,2G内存就能跑大模型,人人皆可在普通机器上,实现大模型本地部署;是目前已知的部署成本最低的大模型库;
  2. 支持广:目前支持了4种大模型:ChatGLM大模型;鹏程盘古大模型;BlinkDL的ChatRWKV;国外Meta的LLaMA大模型

Jittor 官方文档

本文已经在 macOS M1 Max 64G 上以原生 arm64 跑起来了,理论上 32G 也行,不过因为是 CPU 模式回答会比较慢 api 回答根据问题答案会等很久(实现原因导致,会完全等问题结束才返回),如果是 命令行模式,则有交互效果

  • 内存要求:至少2G,推荐32G
  • 磁盘空间:至少 40GB 空闲磁盘空间,用于下载参数和存储交换文件
  • Python 版本要求 3.8

本文使用的 conda 为 arm64 架构的 miniforge3,使用的为 Miniforge3-MacOSX-arm64

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 卸载 Anaconda,安装 arm64
$ brew uninstall miniconda
$ cd ~/Downloads
$ wget https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-MacOSX-arm64.sh -O Miniforge3-MacOSX-arm64.sh
Miniforge3 will now be installed into this location:
/Users/${USER}/miniforge3

  - Press ENTER to confirm the location
  - Press CTRL-C to abort the installation
  - Or specify a different location below

==> For changes to take effect, close and re-open your current shell. <==

If you'd prefer that conda's base environment not be activated on startup,
   set the auto_activate_base parameter to false:

conda config --set auto_activate_base false

Thank you for installing Miniforge3!

# will add ~/.zshrc to source
# check
$ conda --version
conda 23.1.0

配置 Anaconda 镜像使用帮助,因为后面安装会用到 配置 PyPI 镜像加速

  • 需要单独隔离 conda 来执行
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
cd github.com/Jittor
# 国内使用 gitlink clone
$ git clone https://gitlink.org.cn/jittor/JittorLLMs.git --depth 1
$ git clone https://github.com/Jittor/JittorLLMs.git --depth 1

$ cd JittorLLMs
# create new env
$ conda create -y -n JittorLLMs python=3.8
$ conda activate JittorLLMs
# 配置加速
$ pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
# isntall
# -i 指定用jittor的源, -I 强制重装Jittor版torch
$ pip install -r requirements.txt -i https://pypi.jittor.org/simple -I

# run with cli_demo
$ python cli_demo.py [chatglm|pangualpha|llama|chatrwkv]
# 运行后会自动从服务器上下载模型文件到本地,会占用根目录下一定的硬盘空间

## 首次运行需要安装依赖
# chatglm
$ python -m pip install -r models/chatglm/requirements.txt -i https://pypi.jittor.org/simple
  • 日常使用
1
2
3
4
$ conda activate JittorLLMs

# run with cli_demo
$ python cli_demo.py [chatglm|pangualpha|llama|chatrwkv]
1
2
3
4
$ python cli_demo.py chatrwkv

Check failed: value==0  No CUDA found.
Caught SIGCHLD. Maybe out of memory, please reduce your worker size. si_errno: 0 si_code: 0 si_status: 0 , quick exit

在 macOS 上跑会炸内存

1
2
$ export JT_SAVE_MEM=1
$ export cpu_mem_limit=16000000000
1
2
# 没有安装此模型需要的依赖,请尝试运行 'python -m pip install -r models/chatrwkv/requirements.txt -i https://pypi.jittor.org/simple'
$ python -m pip install -r models/chatrwkv/requirements.txt -i https://pypi.jittor.org/simple

JittorLLM 在api.py文件之中,提供了一个架设后端服务的示例

1
2
3
4
5
# install depends
$ python -m pip install fastapi uvicorn

$ export JT_SAVE_MEM=1 && export cpu_mem_limit=16000000000
$ python api.py chatglm
  • curl
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
$ curl -X POST http://0.0.0.0:8000 -d '{"prompt":"你好,解5x=13"}'

# 请求例子
$ curl -X POST http://192.168.50.55:8000 -d '{"prompt":"你好,解2x=512"}' | jq
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1036  100  1005    0    31      1      0  0:16:45  0:14:27  0:02:18   230
{
  "response": "你好!如果你有一个方程 $2x=512$,你可以使用消元法或代入法来解它。\n\n使用消元法,可以将方程两边同时除以 $2$,得到 $x=256$。这个答案是正确的,因为 $2x=512$ 可以被简化为 $x=256$。\n\n如果你使用代入法,可以将 $256$ 直接代入原方程,得到 $256=512$。这个答案也是正确的,因为 $512$ 等于 $256\\times2$。\n\n因此,你的方程 $2x=512$ 的解是 $x=256$。",
  "history": [
    [
      "你好,解2x=512",
      "你好!如果你有一个方程 $2x=512$,你可以使用消元法或代入法来解它。\n\n使用消元法,可以将方程两边同时除以 $2$,得到 $x=256$。这个答案是正确的,因为 $2x=512$ 可以被简化为 $x=256$。\n\n如果你使用代入法,可以将 $256$ 直接代入原方程,得到 $256=512$。这个答案也是正确的,因为 $512$ 等于 $256\\times2$。\n\n因此,你的方程 $2x=512$ 的解是 $x=256$。"
    ]
  ],
  "status": 200,
  "time": "2023-04-27 17:03:24"
}
1
2
3
4
5
# install depends
$ python -m pip install gradio

$ export JT_SAVE_MEM=1 && export cpu_mem_limit=16000000000
$ python web_demo.py chatglm

请安装Jittor版本大于1.3.7.8,并添加如下环境变量

1
2
3
4
5
6
7
8
9
export JT_SAVE_MEM=1
# 限制cpu最多使用16G
export cpu_mem_limit=16000000000
# 限制device内存(如gpu、tpu等)最多使用8G
export device_mem_limit=8000000000
# windows 用户,请使用powershell
# $env:JT_SAVE_MEM="1"
# $env:cpu_mem_limit="16000000000"
# $env:device_mem_limit="8000000000"

用户可以自由设定cpu和设备内存的使用量,如果不希望对内存进行限制,可以设置为 -1

1
2
3
4
5
6
7
8
# 限制cpu最多使用16G
export cpu_mem_limit=-1
# 限制device内存(如gpu、tpu等)最多使用8G
export device_mem_limit=-1
# windows 用户,请使用powershell
# $env:JT_SAVE_MEM="1"
# $env:cpu_mem_limit="-1"
# $env:device_mem_limit="-1"

如果想要清理磁盘交换文件,可以运行如下命令

1
python -m jittor_utils.clean_cache swap