521 lines
16 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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编号
NameGPU 类型
Persistence-M
Fan风扇转速
Temp温度单位摄氏度
Perf表征性能状态从P0到P12P0表示最大性能P12表示状态最小性能
Pwr:Usage/Cap能耗表示
Bus-Id涉及GPU总线的相关信息
Disp.ADisplay 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. 列出所有的环境
```shell
conda env list
```
2. 查看conda下的包
```she
conda list
```
3. 创建环境
```shell
conda create -n env-name [list of package]
```
-n env-name 是设置新建环境的名字list of package 是可选项,选择要为该环境安装的包
如果我们没有指定安装python的版本conda会安装我们最初安装conda所装的那个版本的python
若创建特定python版本的包环境需键入
```shell
conda create -n env-name python=3.6
4. 激活环境
```shell
conda activate env-name
```
切换到base环境
```shell
conda activate base
```
5. 删除环境
执行以下命令可以将该指定虚拟环境及其中所安装的包都删除。
```shell
conda remove --name env_name --all
```
如果只删除虚拟环境中的某个或者某些包则是:
```shell
conda remove --name env_name package_name
```
## 问题
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
# vLLM
## 安装
```shell
conda create -n vLLM python=3.12
conda activate vLLM
pip install vLLM
```
## 部署
### deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B
```shell
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`的源码:
```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)