博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持!
博主链接
本人就职于国际知名终端厂商,负责modem芯片研发。
在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G技术研究。
博客内容主要围绕:
5G/6G协议讲解
高级C语言讲解
Rust语言讲解
文章目录
- 本地部署 KTransformers并加载大模型
- 一、搭建运行环境
- 二、本都部署ktransformers
- 三、常见问题
- 3.1 Building wheel for ktransformers (pyproject.toml) did not run successfully
- 3.2 No module named 'sched_ext'
- 3.3 出现很多“undefined symbol”的错误提示
- 3.4 提示 libstdc++.so.6: version `GLIBCXX_3.4.30' not found
- 四、本地部署DeepSeek
- 4.1 Deepseek-V3-671B-Q4_K_M
- 4.2 相关参数解释
- 五、总结
本地部署 KTransformers并加载大模型
KTransformers,发音为Quick Transformers,旨在通过高级kernel优化和并行策略来增强transformer体验。KTransformers是一个灵活的、以python为中心的框架,其核心是可扩展性。通过使用一行代码实现和注入优化模块,用户可以访问与transformer兼容的接口,兼容OpenAI和Ollama的RESTful api,甚至是简化的类似聊天gpt的web UI。
一、搭建运行环境
-
CUDA 12.1及以上版本,如果没有安装可以从这里安装,安装完成后将CUDA添加到PATH环境变量:
# Adding CUDA to PATH if [ -d "/usr/local/cuda/bin" ]; thenexport PATH=$PATH:/usr/local/cuda/bin fiif [ -d "/usr/local/cuda/lib64" ]; thenexport LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64# Or you can add it to /etc/ld.so.conf and run ldconfig as root:# echo "/usr/local/cuda-12.x/lib64" | sudo tee -a /etc/ld.so.conf# sudo ldconfig fiif [ -d "/usr/local/cuda" ]; thenexport CUDA_PATH=$CUDA_PATH:/usr/local/cuda fi
-
安装cmake(cmake>=3.25)
Ubuntu 22.04 LTS或更高版本的默认CMake版本可能不支持更新的CUDA语言方言(例如CUDA 20)。这可能会导致错误,如目标“cmTC_xxxxxx”需要语言方言“CUDA20”,但CMake不知道使用哪个编译标志来启用它。要解决这个问题,安装一个较新的CMake版本,例如,通过添加Kitware APT存储库。sudo apt-get update sudo apt-get install build-essential cmake ninja-build patchelf
-
安装Miniconda3或者Anaconda3
安装Miniconda3或Anaconda3,用Python=3.11创建一个虚拟环境来运行我们的程序。假设您的Anaconda安装目录是~/anaconda3,您应该确保Anaconda使用的GNU C++标准库的版本标识符包括GLIBCXX_3.4.32
conda create --name ktransformers python=3.11 conda activate ktransformers # you may need to run ‘conda init’ and reopen shell firstconda install -c conda-forge libstdcxx-ng # Anaconda provides a package called `libstdcxx-ng` that includes a newer version of `libstdc++`, which can be installed via `conda-forge`.strings ~/anaconda3/envs/ktransformers/lib/libstdc++.so.6 | grep GLIBCXX
-
安装PyTorch,packaging,ninja
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu126 pip3 install packaging ninja cpufeature numpy
-
安装相应版本的 flash-attention
-
如果您想使用numa支持,不仅需要设置USE_NUMA=1,还需要确保已经安装了libnuma-dev
sudo apt-get install libnuma-dev
-
如果您想使用多并发版本,请安装以下依赖项:
sudo apt install libtbb-dev libssl-dev libcurl4-openssl-dev libaio1 libaio-dev libgflags-dev zlib1g-dev libfmt-dev
二、本都部署ktransformers
-
下载源代码并编译,
git clone https://github.com/kvcache-ai/ktransformers.git cd ktransformers git submodule update --init --recursive
-
对于 linux 执行下面的命令
- 简单安装:
bash install.sh
- 有两个CPU和1T RAM的大佬:
# Make sure your system has dual sockets and double size RAM than the model's size (e.g. 1T RAM for 512G model) apt install libnuma-dev export USE_NUMA=1 bash install.sh # or #make dev_install
- 有500G RAM并希望开启多并发:
USE_BALANCE_SERVE=1 bash ./install.sh
- 有两个CPU和1T RAM并希望开启多并发的大佬:
USE_BALANCE_SERVE=1 USE_NUMA=1 bash ./install.sh
-
对于 Windows 执行下面的命令
install.bat
三、常见问题
3.1 Building wheel for ktransformers (pyproject.toml) did not run successfully
CUDA环境变量没有正确配置,(解决方法)[https://github.com/kvcache-ai/ktransformers/issues/1104#issuecomment-2790554736]。
3.2 No module named ‘sched_ext’
升级CMake版本,或者升级CUDA版本,相关(解决方法)[https://github.com/kvcache-ai/ktransformers/issues/1017]。
3.3 出现很多“undefined symbol”的错误提示
尝试不同的flash_attn版本,或者直接源码编译,相关(解决方法)[https://github.com/kvcache-ai/ktransformers/issues/715]。
3.4 提示 libstdc++.so.6: version `GLIBCXX_3.4.30’ not found
可以尝试下面的命令,相关(解决方法)[https://github.com/kvcache-ai/ktransformers/issues/402]:
export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libstdc++.so.6
四、本地部署DeepSeek
运行下面的命令,程序会自动从HuggingFace中下载gguf
格式的模型,并自动部署。如果没有现在需要自己去HuggingFace找到想要部署模型的gguf
格式,并在后放入项目根目录中,同时还需要下载模型卡放入到一个单独的文件夹下面,用来解析模型。
4.1 Deepseek-V3-671B-Q4_K_M
python ktransformers/server/main.py \
--model_path 模型卡路径 \
--gguf_path gguf格式的模型路径 \
--cpu_infer 65 \
--optimize_config_path ktransformers/optimize/optimize_rules/DeepSeek-V3-Chat-serve.yaml \
--port 10002 \
--chunk_size 256 \
--max_new_tokens 1024 \
--max_batch_size 4 \
--port 10002 \
--cache_lens 32768 \
--backend_type balance_serve
4.2 相关参数解释
参数 | 参数含义 |
---|---|
max_new_tokens | 每个请求生成的最大令牌数量 |
cache_lens | 调度程序分配的kvcache的总长度。所有请求共享一个kvcache空间 |
max_batch_size | 引擎在一次运行中处理的请求(预填充+解码)的最大数量。(仅balance_serve支持) |
chunk_size | 引擎在单次运行中处理的令牌的最大数量。对应32768个令牌,占用的空间将在请求完成后释放 |
backend_type | Balance_serve是v0.2.4版本中引入的多并发后端引擎。最初的单并发引擎是ktransformers |
model_path | safetensor的config配置文件的路径(只需要config文件,不需要safetensor模型文件) |
force_think | 开启DeepSeek R1的深度思考 |
gguf_path | gguf文件路径 |
五、总结
项目可以在受限资源上利用注入脚本实现CPU+GPU+DISK的大模型部署。但是本地搭建比较复杂,复杂点主要包括运行环境搭建复杂,高效的注入脚本编写复杂,需要对模型架构有深入理解。并发能力有限,很难实现高并发低时延的问答效果,只能作为实验测试使用。
注入脚本相关的内容可以参考(官方项目介绍)[https://github.com/kvcache-ai/ktransformers]