---
title: 大模型
date: 2025-02-18 10:06:57
tags:
---

# Ollama

## 1. 安装

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



![image-20250218102658870](https://markdownhexo.oss-cn-hangzhou.aliyuncs.com/img/image-20250218102658870.png)

## 2. 下载模型

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

![image-20250218104847668](https://markdownhexo.oss-cn-hangzhou.aliyuncs.com/img/image-20250218104847668.png)

以DeepSeek为例：

7B 版本（推荐显存 8G）:

```bash
ollama pull deepseek-coder:7b
```

8B 版本（推荐显存 8G）:

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

14B 版本（推荐显存 12G）:

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

32B 版本（推荐显存 32G）:

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

70B 版本（需要高端显卡支持）:

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

## 3. Ollama 常用命令

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

```bash
# 启动 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>`.

请参考[上面的部分](https://ollama.readthedocs.io/faq/#how-do-i-configure-ollama-server)了解如何在你的平台上设置环境变量。

![image-20250218132430850](https://markdownhexo.oss-cn-hangzhou.aliyuncs.com/img/image-20250218132430850.png)

## 5. WSL中Ollama使用Windows中的

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

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

# nvidia

## cuda-toolkit

### WSL安装

1. 下载 **CUDA Toolkit Installer**

   ```shell
   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. 配置环境变量
   ```shell
   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 内存功能)。

```shell
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上每个进程所使用的显存情况。

### 持续监控

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

## nvidia-smi -L

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

# ModelScope

## 模型下载

### 安装

```shell
pip install modelscope
```

### 命令行下载

```shell
# 下载完整模型库
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激活[虚拟环境](https://so.csdn.net/so/search?q=虚拟环境&spm=1001.2101.3001.7020)，只显示环境名称，不再显示用户名和当前文件夹

   ```shell
   #在个人环境下修改
   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
   ```

   

2. 

# Jupyter Notebook

> 

## 安装

```shell
pip install jupyter
```

## 运行

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

# UnSloth

# LLama.cpp

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

## 编译llama.cpp

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

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

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

**安装CMAKE**

```shell
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版本**

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

**编译GPU版本**

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

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

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

## 模型下载与转换

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

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

下载好的模型是以`HuggingFace`的`safetensors`格式存放的，而`llama.cpp`使用的是`GGUF`格式，因此需要先要把模型转换为`GGUF`格式：

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

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

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

```text
./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`提供了多种运行模型的方式：

### 命令行方式

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

```text
./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`的方式运行，交互性要好很多。

首先在终端执行命令

```text
./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技术社区](https://deepseek.csdn.net/67b84a893c9cd21f4cb9aab6.html#devmenu2)

## 安装

```shell
# 首先 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](https://markdownhexo.oss-cn-hangzhou.aliyuncs.com/img/image-20250320152454509.png)

![image-20250320152533756](https://markdownhexo.oss-cn-hangzhou.aliyuncs.com/img/image-20250320152533756.png)

合并

![image-20250320152645802](https://markdownhexo.oss-cn-hangzhou.aliyuncs.com/img/image-20250320152645802.png)
