「LLM」大模型本地部署 
更新: 10/26/2024 字数: 0 字 时长: 0 分钟
Xorbits Inference是一个开源平台,用于简化各种AI模型的运行和集成,借助Xinference,你可以使用任何开源的LLM、嵌入模型和多模态模型在云端或者本地环境中运行推理,并创建强大的AI应用,通过Xinference,可以轻松的一键部署自己的模型或内置的前沿开源模型。
0x01 本地部署平台比较 
ollama vs Xinference
| 特性 | OLLAMA | Xinference | 
|---|---|---|
| 主要用途 | 低资源推理优化 | 多模型、多引擎通用推理平台 | 
| 硬件适应性 | 高灵活性、适合低端到高端硬件 | 主要适用于高端硬件 | 
| 延迟 | 低延迟、适合实时应用 | 根据配置不同,延迟可能较高 | 
| 模型支持 | 可能有限,专注于优化的模型 | 广泛支持多种模型和格式 | 
| 引擎支持 | 可能专注于特定推理引擎 | 支持TensoFlow、PyTorch、ONNX等 | 
| 扩展性 | 较低 | 高扩展性,适合大模型部署 | 
| 集成难度 | 简单,适合快速部署 | 复杂。适合定制化需求的部署 | 
| 资源需求 | 较低,适合低资源场景 | 较高,适合需要高性能的场景 | 
| 优化特点 | 针对推理优化,特别是低端硬件 | 更广泛的优化选择,支持长上下文 | 
| 用户群体 | 开发者、工程师,尤其在资源有限的时候 | 大规模企业、需要复杂推理的用户 | 
0x02 Xinference 部署大模型 
首先,我们需要准备一个3.9以上的python环境来运行Xinference,建议先根据 conda 官网文档来安装 conda。
2.1 安装Anaconda 
Anaconda是一个广泛用于数据科学和机器学习领域的开源软件发行版,它旨在提供一个便捷的环境来管理 python 和 R 编程语言的各种数据科学工具、库和依赖项。Anaconda内置了包管理器 conda,使得用户可以轻松创建、管理和切换虚拟环境,并安装数千个数据科学、机器学习、深度学习和科学计算相关的包。
要在ubuntu 22.04上安装Anaconda:
- 首先,使用 curl 从官方网站下载Anaconda安装脚本,
sunshine@ollama:~/tools/anaconda$ curl --output anaconda.sh https://repo.anaconda.com/archive/Anaconda3-2024.10-1-Linux-x86_64.sh- 下载后,执行下载的Anaconda安装脚本
sunshine@ollama:~/tools/anaconda$ ls -al
总计 1076668
drwxrwxr-x 2 sunshine sunshine       4096 10月 26 09:19 .
drwxrwxr-x 3 sunshine sunshine       4096 10月 26 09:19 ..
-rw-rw-r-- 1 sunshine sunshine 1102495056 10月 26 09:21 anaconda.sh
sunshine@ollama:~/tools/anaconda$ chmod +x anaconda.sh 
sunshine@ollama:~/tools/anaconda$ bash anaconda.sh在安装过程中需要接收Anaconda许可协议,确认安装位置。
- 安装完成后,激活安装
sunshine@ollama:~$ source .bashrc 
(base) sunshine@ollama:~$- 验证安装,可以使用以下命令:
(base) sunshine@ollama:~$ conda list
# packages in environment at /home/sunshine/anaconda3:
#
# Name                    Version                   Build  Channel
_anaconda_depends         2024.10             py312_mkl_0  
_libgcc_mutex             0.1                        main  
_openmp_mutex             5.1                       1_gnu  
aiobotocore               2.12.3          py312h06a4308_0  
aiohappyeyeballs          2.4.0           py312h06a4308_0  
aiohttp                   3.10.5          py312h5eee18b_0  
aioitertools              0.7.1              pyhd3eb1b0_0  
aiosignal                 1.2.0              pyhd3eb1b0_0  
alabaster                 0.7.16          py312h06a4308_0  
altair                    5.0.1           py312h06a4308_0  
anaconda-anon-usage       0.4.4           py312hfc0e8ea_100  
anaconda-catalogs         0.2.0           py312h06a4308_1  
anaconda-client           1.12.3          py312h06a4308_0  
anaconda-cloud-auth       0.5.1           py312h06a4308_0  
anaconda-navigator        2.6.3           py312h06a4308_0  
anaconda-project          0.11.1          py312h06a4308_0  
annotated-types           0.6.0           py312h06a4308_0  
anyio                     4.2.0           py312h06a4308_0  
aom                       3.6.0                h6a678d5_0  
appdirs                   1.4.4              pyhd3eb1b0_0  
archspec                  0.2.3              pyhd3eb1b0_02.2 Xinference 本地源码安装 
使用conda创建一个 3.11 的python环境
(base) sunshine@ollama:~$ conda create --name xinference python=3.11
Channels:
 - defaults
Platform: linux-64
Collecting package metadata (repodata.json): done
Solving environment: done
## Package Plan ##
  environment location: /home/sunshine/anaconda3/envs/xinference
  added / updated specs:
    - python=3.11
The following packages will be downloaded:
    package                    |            build
    ---------------------------|-----------------
    pip-24.2                   |  py311h06a4308_0         2.8 MB
    python-3.11.10             |       he870216_0        32.9 MB
    setuptools-75.1.0          |  py311h06a4308_0         2.2 MB
    wheel-0.44.0               |  py311h06a4308_0         145 KB
    ------------------------------------------------------------
                                           Total:        38.1 MB
The following NEW packages will be INSTALLED:
  _libgcc_mutex      pkgs/main/linux-64::_libgcc_mutex-0.1-main 
  _openmp_mutex      pkgs/main/linux-64::_openmp_mutex-5.1-1_gnu 
  bzip2              pkgs/main/linux-64::bzip2-1.0.8-h5eee18b_6 
  ca-certificates    pkgs/main/linux-64::ca-certificates-2024.9.24-h06a4308_0 
  ld_impl_linux-64   pkgs/main/linux-64::ld_impl_linux-64-2.40-h12ee557_0 
  libffi             pkgs/main/linux-64::libffi-3.4.4-h6a678d5_1 
  libgcc-ng          pkgs/main/linux-64::libgcc-ng-11.2.0-h1234567_1 
  libgomp            pkgs/main/linux-64::libgomp-11.2.0-h1234567_1 
  libstdcxx-ng       pkgs/main/linux-64::libstdcxx-ng-11.2.0-h1234567_1 
  libuuid            pkgs/main/linux-64::libuuid-1.41.5-h5eee18b_0 
  ncurses            pkgs/main/linux-64::ncurses-6.4-h6a678d5_0 
  openssl            pkgs/main/linux-64::openssl-3.0.15-h5eee18b_0 
  pip                pkgs/main/linux-64::pip-24.2-py311h06a4308_0 
  python             pkgs/main/linux-64::python-3.11.10-he870216_0 
  readline           pkgs/main/linux-64::readline-8.2-h5eee18b_0 
  setuptools         pkgs/main/linux-64::setuptools-75.1.0-py311h06a4308_0 
  sqlite             pkgs/main/linux-64::sqlite-3.45.3-h5eee18b_0 
  tk                 pkgs/main/linux-64::tk-8.6.14-h39e8969_0 
  tzdata             pkgs/main/noarch::tzdata-2024b-h04d1e81_0 
  wheel              pkgs/main/linux-64::wheel-0.44.0-py311h06a4308_0 
  xz                 pkgs/main/linux-64::xz-5.4.6-h5eee18b_1 
  zlib               pkgs/main/linux-64::zlib-1.2.13-h5eee18b_1 
Proceed ([y]/n)? y
Downloading and Extracting Packages:
                                                                                                                                            
Preparing transaction: done                                                                                                                 
Verifying transaction: done                                                                                                                 
Executing transaction: done                                                                                                                 
#
# To activate this environment, use
#
#     $ conda activate xinference
#
# To deactivate an active environment, use
#
#     $ conda deactivate
(base) sunshine@ollama:~$ conda activate xinference
(xinference) sunshine@ollama:~$在安装Xinference时,将安装 Transformers 和 vLLM 作为Xinference的推理引擎后端
(xinference) sunshine@ollama:~$ pip install "Xinference"
(xinference) sunshine@ollama:~$ pip install "Xinference[ggml]"
(xinference) sunshine@ollama:~$ pip install "Xinference[pytorch]"
(xinference) sunshine@ollama:~$ pip install "Xinference[transformers]"
(xinference) sunshine@ollama:~$ pip install "Xinference[vllm]"安装完Xinference之后,可以执行以下命令验证PyTorch是否正常:
(xinference) sunshine@ollama:~$ python -c "import torch; print(torch.cuda.is_available())"安装 llama-cpp-python时可能会出现报错,报错原因是:使用 pip 安装时,是通过下载源码编译安装的,这时候如果系统没有相应的cmake和gcc版本就会出现报错,那么可以根据系统选择官方编译后的whl文件来进行下载离线安装。
(xinference) sunshine@ollama:~$ wget https://github.com/abetlen/llama-cpp-python/releases/download/v0.3.1/llama_cpp_python-0.3.1-cp311-cp311-linux_x86_64.whl下载后执行安装命令
(xinference) sunshine@ollama:~$ pip install llama_cpp_python-0.3.1-cp311-cp311-linux_x86_64.whl还有一种方法就是,通过C++编译器进行编译的方式。
安装必要的编译工具:
sudo apt install build-essential cmake g++然后正确的设置编译环境
export CC=gcc
export CXX=g++
pip install --no-cache-dir llama-cpp-python2.3 启动Xinference服务 
Xinference默认会在本地启动服务,端口默认为9997,配置 -H 0.0.0.0参数,非本地客户端也可以通过主机的IP地址来访问Xinference服务。
(xinference) sunshine@ollama:~$ xinference-local --host 0.0.0.0 --port 8888
在安装之后,我们就可以运行一些量化后的大模型。
0x03 什么是量化后的大模型 
量化后的大模型是指在模型压缩和优化过程中,将深度学习模型的权重和激活值从原始的高精度(通常是32位浮点数,即FP32)降低到较低的精度(例如8位数、4位整数等)的过程,量化的目的是减少模型的内存占用和计算复杂度,从而加快推理速度并降低硬件要求,尤其是在资源受限的环境中。
将环境切换到 Xinference
conda env list
conda create -n xinference python=3.11.7
conda activate xinference
conda env list
(xinference) sunshine@ollama:~/桌面$ pip show xinference
Name: xinference
Version: 0.16.1
Summary: Model Serving Made Easy
Home-page: https://github.com/xorbitsai/inference
Author: Qin Xuye
Author-email: qinxuye@xprobe.io
License: Apache License 2.0
Location: /home/sunshine/anaconda3/envs/xinference/lib/python3.11/site-packages
Requires: aioprometheus, async-timeout, click, fastapi, gradio, huggingface-hub, modelscope, nvidia-ml-py, openai, passlib, peft, pillow, pydantic, python-jose, requests, sse-starlette, tabulate, timm, torch, tqdm, typing-extensions, uvicorn, xoscar
Required-by:0x04 运行大模型 
运行了 Xinference 之后,我们就可以设置并运行各类大模型。

接下来以千问模型所要设置的参数为例
可以使用以下命令查询与qwen1.5-chat模型相关的参数组合,以决定它能够怎样跑在各种推理引擎上。
xinference engine -e http://127.0.0.1:8888 --model-name qwen1.5-chate
(xinference) sunshine@ollama:~/桌面$ xinference engine -e http://127.0.0.1:8888 --model-name qwen1.5-chat
Name          Engine        Format      Size (in billions)  Quantization
------------  ------------  --------  --------------------  --------------
qwen1.5-chat  Transformers  pytorch                    0_5  4-bit
qwen1.5-chat  Transformers  pytorch                    0_5  8-bit
qwen1.5-chat  Transformers  pytorch                    0_5  none
qwen1.5-chat  Transformers  pytorch                    1_8  4-bit
qwen1.5-chat  Transformers  pytorch                    1_8  8-bit
qwen1.5-chat  Transformers  pytorch                    1_8  none
qwen1.5-chat  Transformers  pytorch                      4  4-bit
...........
参数解释:
1. Name:模型的名称
2. Engine:模型能够运行在哪些引擎上面,当前的是 Transformers 和 llama.cpp。
3. Format:格式
4. Size:模型的参数数量,以10亿为单位,这个参数代表了模型的大小和复杂性,参数量越大的模型表现能力越强,当然,对硬件的要求也越高。
5. Quantization:量化方法,量化到的精度Transformers 和 llama.cpp 的区别:
- llama.cpp 一般是运行的是量化后的模型,速度比较快,但是精度有所缺失,所以质量有所缺失。
- Transformers 是加载原版的模型,需要大显存才能运行起来,对显存的要求比较高。
接下来尝试运行一个qwen1.5-chat的模型,首先进行设置,然后点击小火煎就可以运行了。

点击后,在后台控制台就会开始下载这个千问的模型了,经过一段时间等待和运行之后,本地大模型就部署成功了。

并且我们也可以尝试和模型进行对话

通常我们说的上下文 128k 是什么意思?
上下文128k,上下文通常指的是模型在处理输入时所能支持的最大令牌(token)数量为128000个,这个
k指的是千。所以说,模型能够处理的上下文长度越长,代表模型的能力也就越强。
0x05 dify中配置Xinference中的本地大模型 
在设置中选择模型供应商,然后选择 Xinference 选择添加模型。
模型类型选择 LLM,因为我们刚才添加的是大语言模型。
模型名称输入:qwen1.5-chat
服务器URL:http://192.168.100.6:8888
模型UID:输入 qwen1.5-chat

添加之后,进行测试,可以看到,可以正常的聊天了,那么本地的LLM大模型就运行成功了。

