Ollama

1. 安装

首先需要下载并安装Ollama,这是运行模型的基础环境。

image-20250218102658870

2. 下载模型

打开命令行终端,根据需要运行以下命令之一来下载对应版本的模型:

image-20250218104847668

以DeepSeek为例:

7B 版本(推荐显存 8G):

ollama pull deepseek-coder:7b

8B 版本(推荐显存 8G):

ollama run huihui_ai/deepseek-r1-abliterated:8b

14B 版本(推荐显存 12G):

ollama run huihui_ai/deepseek-r1-abliterated:14b

32B 版本(推荐显存 32G):

ollama run huihui_ai/deepseek-r1-abliterated:32b

70B 版本(需要高端显卡支持):

ollama run huihui_ai/deepseek-r1-abliterated:70b

3. Ollama 常用命令

在使用 Ollama 时,以下是一些常用的命令操作:

# 启动 Ollama 服务
ollama serve

# 从 Modelfile 创建模型
ollama create <模型名称>

# 显示模型信息
ollama show <模型名称>

# 运行模型
ollama run <模型名称>

# 停止运行中的模型
ollama stop <模型名称>

# 从仓库拉取模型
ollama pull <模型名称>

# 推送模型到仓库
ollama push <模型名称>

# 列出所有已安装的模型
ollama list

# 列出正在运行的模型
ollama ps

# 复制模型
ollama cp <源模型> <目标模型>

# 删除模型
ollama rm <模型名称>

# 显示模型文件
ollama show --modelfile <模型名称>

4. Ollama模型存储目录

  • macOS: ~/.ollama/models
  • Linux: /usr/share/ollama/.ollama/models
  • Windows: C:\Users\%username%\.ollama\models

如何将它们设置为不同的位置?

如果需要使用不同的目录,可以将环境变量 OLLAMA_MODELS 设置为你选择的目录。

注意:在 Linux 上使用标准安装程序时,ollama 用户需要对指定目录有读写权限。要将目录分配给 ollama 用户,请运行 sudo chown -R ollama:ollama <directory>.

请参考上面的部分了解如何在你的平台上设置环境变量。

image-20250218132430850

5. WSL中Ollama使用Windows中的

# 编辑环境变量
vim /etc/profile

# 文件末尾添加
export PATH="$PATH:/mnt/c/Program Files/Ollama"
alias ollama='ollama.exe'

nvidia

cuda-toolkit

WSL安装

  1. 下载 CUDA Toolkit Installer

    wget https://developer.download.nvidia.com/compute/cuda/12.8.1/local_installers/cuda-repo-rhel9-12-8-local-12.8.1_570.124.06-1.x86_64.rpm
    sudo rpm -i cuda-repo-rhel9-12-8-local-12.8.1_570.124.06-1.x86_64.rpm
    sudo dnf clean all
    sudo dnf -y install cuda-toolkit-12-8
  2. 配置环境变量

    vim ~/.bashrc

    # 文件末尾添加
    # cuda 10.2
    export CUDA_HOME=/usr/local/cuda
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64
    export PATH=$PATH:$CUDA_HOME/bin

nvidia-smi

nvidia-smi是nvidia 的系统管理界面 ,其中smi是System management interface的缩写,它可以收集各种级别的信息,查看显存使用情况。此外, 可以启用和禁用 GPU 配置选项 (如 ECC 内存功能)。

nvidia-smi

+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 570.86.09 Driver Version: 571.96 CUDA Version: 12.8 |
|-----------------------------------------+------------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+========================+======================|
| 0 NVIDIA RTX 4000 Ada Gene... On | 00000000:01:00.0 Off | Off |
| N/A 50C P8 7W / 85W | 4970MiB / 12282MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+

+-----------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
| 0 N/A N/A 16221 C /python3.12 N/A |
+-----------------------------------------------------------------------------------------+

解释相关参数含义:

GPU:本机中的GPU编号

Name:GPU 类型

Persistence-M:

Fan:风扇转速

Temp:温度,单位摄氏度

Perf:表征性能状态,从P0到P12,P0表示最大性能,P12表示状态最小性能

Pwr:Usage/Cap:能耗表示

Bus-Id:涉及GPU总线的相关信息;

Disp.A:Display Active,表示GPU的显示是否初始化

Memory-Usage:显存使用率

Volatile GPU-Util:浮动的GPU利用率

Uncorr. ECC:关于ECC的东西

Compute M.:计算模式

Processes 显示每块GPU上每个进程所使用的显存情况。

持续监控

# 使用 watch 命令,它可以定时执行指定的命令并刷新输出。例如,每隔 1 秒刷新一次 GPU 状态,可以使用以下命令
watch -n 1 nvidia-smi

nvidia-smi -L

#  列出所有可用的 NVIDIA 设备
nvidia-smi -L
GPU 0: NVIDIA RTX 4000 Ada Generation Laptop GPU (UUID: GPU-9856f99a-c32c-fe63-b2ad-7bdee2b12291)

ModelScope

模型下载

安装

pip install modelscope

命令行下载

# 下载完整模型库
modelscope download --model deepseek-ai/DeepSeek-R1-Distill-Qwen-7B
# 下载单个文件到指定本地文件夹(以下载README.md到当前路径下“dir”目录为例)
modelscope download --model deepseek-ai/DeepSeek-R1-Distill-Qwen-7B README.md --local_dir ./dir

Anaconda

常用命令

管理环境

  1. 列出所有的环境

    conda env list
  2. 查看conda下的包

    conda list
  3. 创建环境

    conda create -n env-name [list of package]

    -n env-name 是设置新建环境的名字,list of package 是可选项,选择要为该环境安装的包
    如果我们没有指定安装python的版本,conda会安装我们最初安装conda所装的那个版本的python
    若创建特定python版本的包环境,需键入

       conda create -n env-name python=3.6

    4. 激活环境
    ```shell
    conda activate env-name

    切换到base环境

    conda activate base
  4. 删除环境
    执行以下命令可以将该指定虚拟环境及其中所安装的包都删除。

    conda remove --name env_name --all

    如果只删除虚拟环境中的某个或者某些包则是:

    conda remove --name env_name  package_name

问题

  1. conda激活虚拟环境,只显示环境名称,不再显示用户名和当前文件夹

    #在个人环境下修改
    conda activate gatkenv

    conda env config vars set PS1='($CONDA_DEFAULT_ENV)[\u@\h \W]$'
    #重启环境就ok了

    conda deactivate

    conda activate gatkenv

    #在所有的虚拟环境下修改,这个命令的意思是在~/.condarc下添加一行

    conda config --set env_prompt "({default_env})[\u@\h \W]$"

    #取消设置

    conda config --remove-key env_prompt

Jupyter Notebook

安装

pip install jupyter

运行

jupyter notebook
# 若是root用户执行,会出现警告 Running as root is not recommended. Use --allow-root to bypass. 需在后面加上 --allow-root
jupyter notebook --allow-root

UnSloth

vLLM

安装

conda create -n vLLM python=3.12
conda activate vLLM
pip install vLLM

部署

deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B

CUDA_VISIBLE_DEVICES=0 vllm serve /mnt/e/modelscope/deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B --port 8102 --max-model-len 2048 --api-key token-abc123
  • CUDA_VISIBLE_DEVICES=0: 指定使用的 GPU 设备 ID。 0 表示使用第一块 GPU。如果您有多块 GPU,可以根据需要修改为其他 ID (例如 CUDA_VISIBLE_DEVICES=1,2 使用 GPU 1 和 GPU 2)。如果您只有一块 GPU,通常使用 0 即可。
  • /mnt/e/modelscope/deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B: 模型路径。 请替换为您在步骤 2 中模型实际保存的路径。
  • --port 8102: 服务端口号。 8102 是服务启动后监听的端口。您可以根据需要修改端口号,例如 --port 8000。在后续代码调用中,需要使用相同的端口号。
  • –max-model-len 16384: 模型最大上下文长度。 16384 表示模型处理的最大输入序列长度。您可以根据您的 GPU 显存大小和需求调整此参数。对于 /mnt/e/modelscope/deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B 模型,16384 是一个较大的上下文长度。您可以尝试减小此值以减少显存占用,例如 –max-model-len 2048 或更小。
  • 执行启动命令: 在终端或命令提示符中执行上述 vllm serve 命令。
  • 注意 GPU 显存: 启动 vLLM 服务会占用 GPU 显存。请确保您的 GPU 显存足够运行模型。如果显存不足,可能会导致启动失败或运行缓慢。您可以尝试减小 --max-model-len 参数或使用更小规模的模型。

LLama.cpp

llama.cpp是一个基于纯C/C++实现的高性能大语言模型推理引擎,专为优化本地及云端部署而设计。其核心目标在于通过底层硬件加速和量化技术,实现在多样化硬件平台上的高效推理,同时保持低资源占用与易用性。

编译llama.cpp

首先从Github上下载llama.cpp的源码:

git clone https://github.com/ggml-org/llama.cpp
cd llama.cpp

llama.cpp支持多种硬件平台,可根据实际的硬件配置情况选择合适的编译参数进行编译,具体可以参考文档docs/build.md

安装CMAKE

wget https://github.com/Kitware/CMake/releases/download/v4.0.0-rc4/cmake-4.0.0-rc4-linux-x86_64.sh
chmod -R 777 cmake-4.0.0-rc4-linux-x86_64.sh
./cmake-4.0.0-rc4-linux-x86_64.sh
mv cmake-4.0.0-rc4-linux-x86_64/ /usr/local/cmake
echo 'export PATH="/usr/local/cmake/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc

sudo dnf install gcc-toolset-13-gcc gcc-toolset-13-gcc-c++
source /opt/rh/gcc-toolset-13/enable

编译CPU版本

cmake -B build
cmake --build build --config Release -j 8

编译GPU版本

编译英伟达GPU版本需要先装好驱动和CUDA,然后执行下面的命令进行编译

cmake -B build -DGGML_CUDA=ON -DGGML_CUDA_ENABLE_UNIFIED_MEMORY=1
cmake --build build --config Release -j 8

编译完成后,可执行文件和库文件被存放在build/bin目录下。

模型下载与转换

首先从魔搭社区下载模型:

pip install modelscope
modelscope download --model deepseek-ai/DeepSeek-R1-Distill-Qwen-7B --local_dir DeepSeek-R1-Distill-Qwen-7B

下载好的模型是以HuggingFacesafetensors格式存放的,而llama.cpp使用的是GGUF格式,因此需要先要把模型转换为GGUF格式:

# 安装python依赖库
pip install -r requirements.txt
# 转换模型
python convert_hf_to_gguf.py DeepSeek-R1-Distill-Qwen-7B/

转换成功后,在该目录下会生成一个FP16精度、GGUF格式的模型文件DeepSeek-R1-Distill-Qwen-7B-F16.gguf

模型量化

FP16精度的模型跑起来可能会有点慢,我们可以对模型进行量化以提升推理速度。

llama.cpp主要采用了分块量化(Block-wise Quantization)和K-Quantization算法来实现模型压缩与加速,其核心策略包括以下关键技术:

  1. 分块量化(Block-wise Quantization)
    该方法将权重矩阵划分为固定大小的子块(如3264元素为一组),每个子块独立进行量化。通过为每个子块分配独立的缩放因子(Scale)和零点(Zero Point),有效减少量化误差。例如,Q4_K_M表示每个权重用4比特存储,且子块内采用动态范围调整。
  2. K-Quantization(混合精度量化)
    在子块内部进一步划分更小的单元(称为“超块”),根据数值分布动态选择量化参数。例如,Q4_K_M将超块拆分为多个子单元,每个子单元使用不同位数的缩放因子(如6bit的缩放因子和4bit的量化值),通过混合精度平衡精度与压缩率。
  3. 重要性矩阵(Imatrix)优化
    通过分析模型推理过程中各层激活值的重要性,动态调整量化策略。高重要性区域保留更高精度(如FP16),低重要性区域采用激进量化(如Q2_K),从而在整体模型性能损失可控的前提下实现高效压缩。
  4. 量化类型分级策略
    提供Q2_KQ8_K等多种量化级别,其中字母后缀(如_M_S)表示优化级别:
  5. Q4_K_M:中等优化级别,平衡推理速度与精度(常用推荐)。
  6. Q5_K_S:轻量化级别,侧重减少内存占用

典型场景下,Q4_K_M相比FP16模型可减少70%内存占用,推理速度提升2-3倍,同时保持95%以上的原始模型精度。实际部署时需根据硬件资源(如GPU显存容量)和任务需求(如生成文本长度)选择量化策略。

执行下面的命令可将FP16精度的模型采用Q4_K_M的量化策略进行量化:

./build/bin/llama-quantize DeepSeek-R1-Distill-Qwen-7B/DeepSeek-R1-Distill-Qwen-7B-F16.gguf DeepSeek-R1-Distill-Qwen-7B/DeepSeek-R1-Distill-Qwen-7B-Q4_K_M.gguf Q4_K_M

量化完成后,模型文件由15.2G减少到4.7G

运行模型

模型量化完后,我们就可以运行模型来试试效果了。llama.cpp提供了多种运行模型的方式:

命令行方式

执行下面的命令就可以在命令行与模型进行对话了:

./build/bin/llama-cli -m DeepSeek-R1-Distill-Qwen-7B/DeepSeek-R1-Distill-Qwen-7B-Q4_K_M.gguf -cnv

HTTP Server方式

由于模型是以Markdown格式输出内容,因此用命令行的方式看着不太方便。llama.cpp还提供HTTP Server的方式运行,交互性要好很多。

首先在终端执行命令

./build/bin/llama-server -m DeepSeek-R1-Distill-Qwen-7B/DeepSeek-R1-Distill-Qwen-7B-Q4_K_M.gguf --port 8088

然后打开浏览器,输入地址http://127.0.0.1:8088就可以在网页上与模型进行交互了,非常方便!

LLaMA-Factory

可参考文章:DeepSeek-R1-7B-Distill模型微调全过程记录,LLaMA_Factory训练自己的数据集,合并lora微调模型并量化为gguf,接入微信实现自动对话回复_微信_qq_53091149-DeepSeek技术社区

安装

# 首先 conda创建环境
conda create -n LLaMA-Factory python=3.12
# 激活环境
conda activate LLaMA-Factory
# 从GitHub上拉去项目代码到当前目录下
git clone https://github.com/hiyouga/LLaMA-Factory.git
# 进入目录
cd LLaMA-Factory
# 安装所需依赖
pip install -e ".[torch,metrics]"
# 启动webui
python src/webui.py

微调

image-20250320152454509

image-20250320152533756

合并

image-20250320152645802