第二章:部署环境准备
说实话,很多法律大模型项目翻车,不是模型本身不行,而是环境没搭好。我见过太多人花了几十万买卡,结果因为驱动版本不对,白白浪费一周时间。这一章,咱们就把这些坑一个个填平。
2.1 硬件选型:GPU、内存、存储
法律大模型推理,说白了就是算力换效果。我个人习惯把硬件选型分成三档:
| 配置等级 | GPU | 内存 | 存储 | 适用场景 |
|---|---|---|---|---|
| 入门级 | RTX 4090 24GB | 64GB | 1TB NVMe SSD | 7B以下模型微调/推理 |
| 进阶级 | A100 80GB × 2 | 256GB | 4TB NVMe SSD | 13B-70B模型推理 |
| 生产级 | H100 80GB × 4+ | 512GB+ | 10TB NVMe RAID | 70B+模型并发服务 |
这里有个关键点:显存决定你能跑多大的模型。7B模型用FP16推理大概需要14GB显存,13B模型需要26GB。嗯,千万别买少了。
⚠️ 避坑指南
我曾经帮一个律所搭环境,他们买了4张RTX 3090,结果发现主板只支持2路NVLink。最后两张卡之间通信全靠PCIe,推理速度直接砍半。所以买卡前,一定先看主板支持几路NVLink。
我曾经帮一个律所搭环境,他们买了4张RTX 3090,结果发现主板只支持2路NVLink。最后两张卡之间通信全靠PCIe,推理速度直接砍半。所以买卡前,一定先看主板支持几路NVLink。
2.2 操作系统配置
我强烈推荐Ubuntu 22.04 LTS。为什么?因为CUDA和PyTorch对它的支持最好。你想想看,要是装个CentOS,光驱动就能折腾你两天。
系统安装后,这几件事必须做:
- 关闭自动更新——有一次半夜系统自动升级内核,第二天CUDA驱动全挂了,教训深刻。
- 设置swap分区——建议设为内存的2倍。法律文档处理时,内存经常爆。
- 调整文件描述符限制——大模型并发请求多,默认1024根本不够。
# 我的标准配置脚本
sudo apt update && sudo apt upgrade -y
sudo apt install build-essential dkms nvidia-driver-535 -y
# 关闭自动更新
sudo systemctl disable apt-daily.service
sudo systemctl disable apt-daily.timer
# 调整文件描述符
echo "* soft nofile 65535" >> /etc/security/limits.conf
echo "* hard nofile 65535" >> /etc/security/limits.conf
2.3 CUDA与PyTorch环境搭建
这是最容易出问题的环节。我的原则是:版本对齐。别追求最新,要追求稳定。
推荐版本组合(2024年稳定版)
CUDA 12.1 + PyTorch 2.1.0 + cuDNN 8.9.4
CUDA 12.1 + PyTorch 2.1.0 + cuDNN 8.9.4
为什么会推荐这个组合?因为法律大模型常用的transformers库和vLLM,对这个组合测试最充分。我试过CUDA 12.4,结果vLLM直接报错,回退到12.1就一切正常。
# CUDA安装(以12.1为例)
wget https://developer.download.nvidia.com/compute/cuda/12.1.0/local_installers/cuda_12.1.0_530.30.02_linux.run
sudo sh cuda_12.1.0_530.30.02_linux.run
# 配置环境变量
echo 'export PATH=/usr/local/cuda-12.1/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-12.1/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc
# 验证安装
nvidia-smi
nvcc --version
PyTorch安装有个小技巧:用pip装比用conda装更可控。我遇到过conda自动升级CUDA版本,导致项目跑不起来的情况。
# PyTorch安装
pip install torch==2.1.0 torchvision==0.16.0 torchaudio==2.1.0 --index-url https://download.pytorch.org/whl/cu121
# 验证GPU可用
python -c "import torch; print(torch.cuda.is_available()); print(torch.cuda.device_count())"
2.4 Docker容器化部署
说实话,Docker是解决环境依赖问题的终极方案。我现在的所有法律大模型项目,都跑在容器里。好处很明显:
- 环境隔离,不会污染宿主机
- 一键部署,换机器也能跑
- 版本管理,回滚方便
但Docker跑GPU有个坑:必须装nvidia-container-toolkit。我第一次用Docker跑模型时,忘了装这个,结果容器里根本认不出GPU。
# 安装nvidia-container-toolkit
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
sudo systemctl restart docker
# 测试GPU容器
docker run --rm --gpus all nvidia/cuda:12.1.0-base-ubuntu22.04 nvidia-smi
下面是我常用的法律大模型Dockerfile模板:
FROM nvidia/cuda:12.1.0-cudnn8-devel-ubuntu22.04
RUN apt-get update && apt-get install -y \
python3.10 python3-pip git curl \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["python", "serve.py"]
💡 我的经验
建议把模型权重文件挂载到容器外部,用-v参数映射。这样更新模型时不用重新构建镜像,省时间。我一般这样启动:
建议把模型权重文件挂载到容器外部,用-v参数映射。这样更新模型时不用重新构建镜像,省时间。我一般这样启动:
docker run --gpus all -v /data/models:/app/models -p 8000:8000 legal-llm:latest
2.5 环境验证清单
每次搭完环境,我都会跑一遍这个验证脚本。确保所有组件都正常工作:
#!/bin/bash
echo "=== 环境验证 ==="
# 1. 检查GPU
echo "1. GPU状态:"
nvidia-smi --query-gpu=name,memory.total,driver_version --format=csv,noheader
# 2. 检查CUDA
echo "2. CUDA版本:"
nvcc --version | grep "release"
# 3. 检查PyTorch
echo "3. PyTorch GPU可用:"
python3 -c "import torch; print(f'PyTorch: {torch.__version__}, GPU: {torch.cuda.is_available()}')"
# 4. 检查Docker GPU支持
echo "4. Docker GPU支持:"
docker run --rm --gpus all nvidia/cuda:12.1.0-base-ubuntu22.04 nvidia-smi -L
echo "=== 验证完成 ==="
嗯,到这里,你的部署环境就准备好了。记住一句话:环境搭得好,模型跑得早。别嫌这些准备工作繁琐,我见过太多人因为跳过这些步骤,最后花了两倍时间返工。
公众号:蓝海资料掘金营,微信deep3321