443 lines
13 KiB
Markdown
443 lines
13 KiB
Markdown
---
|
||
title: 大模型
|
||
date: 2025-02-18 10:06:57
|
||
tags:
|
||
---
|
||
|
||
# Ollama
|
||
|
||
## 1. 安装
|
||
|
||
首先需要下载并安装Ollama,这是运行模型的基础环境。
|
||
|
||
|
||
|
||

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

|
||
|
||
以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)了解如何在你的平台上设置环境变量。
|
||
|
||

|
||
|
||
## 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
|
||
```
|
||
|
||
## 微调
|
||
|
||

|
||
|
||

|
||
|
||
合并
|
||
|
||

|