--- 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 `. 请参考[上面的部分](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. 列出所有的环境 ```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)