博主未授權任何人或組織機構轉載博主任何原創文章,感謝各位對原創的支持!
博主鏈接
本人就職于國際知名終端廠商,負責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]