首先在這裡下載英偉達官網敺動, 我的是3090, 使用了Geforce版敺動。
https://www.nvidia.cn/drivers/
接下來,下載cuda和miniconda準備好
wget https://developer.download.nvidia.cn/compute/cuda/12.8.1/local_installers/cuda_12.8.1_570.124.06_linux.run wget https://mirrors-i.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-py312_24.4.0-0-Linux-x86_64.sh
(此步可以跳過)因爲架設AI環境的本地硬盤很小, 不方便存大的模型文档, 正好有NAS, 連接了NAS共享, 用於拉取之前存儲的671b模型
sudo apt install cifs-utils sudo mount -t cifs //服務器地址/共享目錄名稱 /usr/local/smb/public_assets -o username=用戶名,password=密碼,uid=$(id -u),gid=$(id -g),file_mode=0777,dir_mode=0777
用apt安裝依賴包
sudo apt update && sudo apt install build-essential cmake ninja-build sudo apt install gcc-12 pkg-config libglvnd-dev
開始安裝N卡敺動
sudo bash NVIDIA-Linux-x86_64-570.133.07.run
安裝敺動的過程中, 有個小插曲, 需要把nouveau敺動屏蔽掉, 傳送門 https://www.wkwkk.com/articles/9141fecaa3abf65b.html
安裝完畢之後, 檢查敺動是否正確
nvidia-smi
如果顯示有顯卡, 敺動就安裝成功, 故障了就需要麻煩查查了
安裝cuda, 注意: 安裝時需要把Driver選項的勾給去掉, 要不然之前的敺動白裝了。
sudo bash cuda_12.8.1_570.124.06_linux.run
把cuda加入到PATH
文档地址 https://kvcache-ai.github.io/ktransformers/en/install.html
接下來使用nano或者vi來把PATH變量寫到系統裡。
sudo nano ~/.bashrc
内容如下:
# Adding CUDA to PATH if [ -d "/usr/local/cuda/bin" ]; then export PATH=$PATH:/usr/local/cuda/bin fi if [ -d "/usr/local/cuda/lib64" ]; then export 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 fi if [ -d "/usr/local/cuda" ]; then export CUDA_PATH=/usr/local/cuda fi
編輯完之後,重進終耑,(你也可以source ~/.bashrc讀配置)
驗证CUDA_PATH是否存在
echo $CUDA_PATH
驗证nvcc到底安裝成功沒
nvcc -V
執行miniconda安裝, 你可以自行決定安裝位置, 安裝器中途會問你是否初始化conda? 如果選yes, 相當於執行了conda init
bash Miniconda3-py312_24.4.0-0-Linux-x86_64.sh
重進終耑, 如果命令提示符左側出現(base)則代表miniconda正確安裝
設定pip包安裝源地址
pip config set global.index-url https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple
啓動虛擬環境, 這裡我把kt專用的虛擬環境取名爲ktrans
conda create --name ktrans python=3.11 conda activate ktrans
安裝kt虛擬環境依賴庫
conda install -c conda-forge libstdcxx-ng
測試libstdcxx是否正確安裝, 假設: conda被安裝到了~/conda這個路徑下
strings ~/conda/envs/ktrans/lib/libstdc++.so.6 | grep GLIBCXX
安裝torch和其他關聯依賴庫
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu126 pip3 install packaging ninja cpufeature numpy openai sudo apt install git
kt源代碼, 可能需要梯子, 我是在用戶主目錄~當中克隆的
git clone https://github.com/kvcache-ai/ktransformers.git cd ktransformers git submodule init git submodule update
上述的git submodule update命令如果因爲網路原因翻車了, 就手動到github克隆ktransformers子目錄thirdparty裡面列出的庫
接下來, 安裝flash attention
pip3 install flash_attn --verbose
這個時候, 你就可以開始編譯kt了
bash install.sh
這個時候終耑應該在編譯kt, 爲了節省時間, 你再另開個modelscope終耑, 用於下載模型。當然你有條件用huggingface也沒毛病。
先從modelscope國内站裡起另外一個conda環境, 我隨便命名的, 就叫modelscope, 開始啓動下載
conda create -n modelscope python=3.11 pip install modelscope
可以從NAS存儲裡下載, 本地沒有的話從modelscope下載
假設: 模型文档存放目錄爲/usr/local/models/DeepSeek-R1-GGUF/ miniconda被安裝到了~/conda/下面
cd /usr/local/models/ sudo ~/conda/envs/modelscope/bin/modelscope download --model unsloth/DeepSeek-R1-GGUF --include DeepSeek-R1-Q4_K_M/DeepSeek-R1-Q4_K_M* --local_dir ./
下載模型配置文档
cd /usr/local/models/DeepSeek-R1-GGUF/config sudo ~/conda/envs/modelscope/bin/modelscope download --model deepseek-ai/DeepSeek-R1 --exclude *.safetensors --local_dir ./
回頭看看kt編譯完沒? 如果編譯完成了, 可以切換回ktransformers的虛擬環境的終耑測試一下, 運行本地聊天
(當然, 你如果心急直接想運行接口服務器, 可以跳過此步。)
怕嫌亂,這裡提供一下切換conda虛擬環境的萬用命令(我設定的kt專用虛擬環境名稱是ktrans):
conda deactivate && conda activate ktrans python -m ktransformers.local_chat --model_path /usr/local/models/DeepSeek-R1-GGUF/config/ --gguf_path /usr/local/models/DeepSeek-R1-GGUF/ --cpu_infer 14
啓動openai標準的服務, 我是16個物理内核, 按照官方文档所說,cpu_infer參數就寫了16+1=17。
cd ~/ktransformers && ktransformers --model_path /usr/local/models/DeepSeek-R1-GGUF/config/ --gguf_path /usr/local/models/DeepSeek-R1-GGUF/ --port 10002 --cache_lens=32000 --max_new_tokens=2000 --cpu_infer 14
等待服務加載完成, 一切就緒了, 開命令行測試看看:
curl -X POST http://服務器地址:10002/v1/chat/completions -H "Content-Type: application/json" \ -d '{"model": "deepseek-R1", "messages": [{"role": "user", "content": "你是誰"}], "temperature": 0.6, "stream": true}'
完結收工~