DeepSeek-VL2 环境配置与使用指南
DeepSeek-VL2 是由 DeepSeek 公司开发的一种高性能视觉-语言模型(VLM)。它是 DeepSeek 系列多模态模型中的一个版本,专注于提升图像和文本之间的交互能力。
本文将详细介绍如何配置 DeepSeek-VL2 的运行环境,并展示如何下载、运行模型以及使用多 GPU 支持。本文内容适用于需要快速上手 DeepSeek-VL2 的开发者。
什么是 VLM?
VLM 是 Vision-Language Model(视觉-语言模型)的缩写。它是一种结合了计算机视觉和自然语言处理技术的多模态模型。VLM 能够同时理解和生成图像与文本信息,适用于多种跨模态任务,例如:
- 图像描述生成(Image Captioning)
- 视觉问答(Visual Question Answering, VQA)
- 图文检索(Image-Text Retrieval)
- 图像编辑指导(Image Editing with Text Instructions)
VLM 的核心在于将视觉特征(来自图像)和语言特征(来自文本)进行联合建模,从而实现对两种模态数据的深度理解。
部分开源VLM性能对比
1. Conda 环境配置
1.1 创建 Python 3.8 环境
conda create --name dk python=3.8
- 创建一个名为
dk
的 Python 3.8 环境。
1.2 安装 PyTorch 及相关库
conda install pytorch==2.0.1 pytorch-cuda=11.8 -c pytorch -c nvidia
conda install torchvision==0.15.2 -c pytorch -c nvidia
conda install torchaudio==2.0.1 -c pytorch -c nvidia
- 安装 PyTorch 2.0.1 及 CUDA 11.8 支持,同时安装兼容版本的
torchvision
和torchaudio
。
1.3 参考链接
- Anaconda 镜像源
- CSDN 安装教程
2. 代码下载与依赖安装
2.1 克隆代码库
git clone https://github.com/deepseek-ai/DeepSeek-VL2.git
cd DeepSeek-VL2
- 克隆 DeepSeek-VL2 代码库并进入项目目录。
2.2 安装依赖
conda activate dk
pip install -e .
pip install -r requirements.txt
- 激活
dk
环境,并安装项目所需的依赖包。
3. 模型下载
3.1 使用 Huggingface 下载模型
# 下载 DeepSeek-R1 模型
huggingface-cli download deepseek-ai/DeepSeek-R1 --local-dir deepseek-ai/DeepSeek-R1# 下载 DeepSeek-VL2 模型
huggingface-cli download deepseek-ai/deepseek-vl2-tiny --local-dir deepseek-ai/deepseek-vl2-tiny
huggingface-cli download deepseek-ai/deepseek-vl2-small --local-dir deepseek-ai/deepseek-vl2-small
huggingface-cli download deepseek-ai/deepseek-vl2 --local-dir deepseek-ai/deepseek-vl2
- 使用
huggingface-cli
下载不同规模的 DeepSeek-VL2 模型。
4. 模型运行
4.1 测试模型
python inference.py --model_path=deepseek-ai/deepseek-vl2-tiny
python inference.py --model_path=deepseek-ai/deepseek-vl2-small
python inference.py --model_path=deepseek-ai/deepseek-vl2
- 使用
inference.py
脚本测试不同规模的模型。
4.2 启动 Web 演示
# 需要 20G GPU 显存
python web_demo.py --model_name=deepseek-ai/deepseek-vl2-tiny# 需要 40G GPU 显存
python web_demo.py --model_name=deepseek-ai/deepseek-vl2-small# 需要 80G GPU 显存
python web_demo.py --model_name=deepseek-ai/deepseek-vl2
- 启动 Web 演示界面,不同规模的模型对 GPU 显存的需求不同。
5. 多 GPU 支持
5.1 修改 inference.py
以支持多 GPU
import os
os.environ["TOKENIZERS_PARALLELISM"] = "false"def split_model(model_name):device_map = {}model_splits = { # 'deepseek-ai/deepseek-vl2-tiny': [13, 14], # 2 GPU'deepseek-ai/deepseek-vl2-small': [13, 14], # 2 GPU 'deepseek-ai/deepseek-vl2': [13, 14], # 2 GPU}num_layers_per_gpu = model_splits[model_name]num_layers = sum(num_layers_per_gpu)layer_cnt = 0for i, num_layer in enumerate(num_layers_per_gpu):for j in range(num_layer):device_map[f'language.model.layers.{layer_cnt}'] = i layer_cnt += 1device_map['vision'] = 0device_map['projector'] = 0device_map['image_newline'] = 0device_map['view_seperator'] = 0device_map['language.model.embed_tokens'] = 0device_map['language.model.norm'] = 0device_map['language.lm_head'] = 0device_map[f'language.model.layers.{num_layers - 1}'] = 0return device_mapdef load_model(model_path, dtype=torch.bfloat16):vl_chat_processor = DeepseekVLV2Processor.from_pretrained(model_path)tokenizer = vl_chat_processor.tokenizer# csdn2kdevice_map = split_model(model_path)vl_gpt: DeepseekVLV2ForCausalLM = AutoModelForCausalLM.from_pretrained(model_path, trust_remote_code=True, torch_dtype=dtype,device_map=device_map).eval()return tokenizer, vl_gpt, vl_chat_processor
- 通过
split_model
函数实现模型在多 GPU 上的分布式加载。
5.2 参考链接
- CSDN 多 GPU 支持教程
6. Docker 镜像源更换
6.1 更换 Docker 镜像源
{"registry-mirrors": ["https://docker.m.daocloud.io/","https://huecker.io/","https://dockerhub.timeweb.cloud","https://noohub.ru/","https://dockerproxy.com","https://docker.mirrors.ustc.edu.cn","https://docker.nju.edu.cn","https://xx4bwyg2.mirror.aliyuncs.com","http://f1361db2.m.daocloud.io","https://registry.docker-cn.com","http://hub-mirror.c.163.com","https://docker.mirrors.ustc.edu.cn"]
}
- 更换 Docker 镜像源以加速镜像下载。
6.2 参考链接
- Docker 镜像源更换教程
7. Gradio 演示
- Gradio 学习参考链接
8. 提示词示例
- deepseek提示库
9. 对话示例
9.1 单张图片对话
# 1 image
Conversation(name='deepseek', system_template='{system_message}', system_message='', roles=('<|User|>', '<|Assistant|>'), messages=[['<|User|>', ('<image>\n<|ref|>The giraffe at the back.<|/ref|>', [<PIL.Image.Image image mode=RGB size=724x1086 at 0x7D615AA524C0>])], ['<|Assistant|>', '']], offset=0, sep_style=<SeparatorStyle.DeepSeek: 1>, sep='\n\n', sep2='', stop_str=['User:', ''], stop_token_ids=[100001])
9.2 多张图片对话
# 3 images
Conversation(name='deepseek', system_template='{system_message}', system_message='', roles=('<|User|>', '<|Assistant|>'), messages=[['<|User|>', ('<image>\n<image>\n<image>\n能帮我用这几个食材做一道菜吗?', [<PIL.Image.Image image mode=RGB size=1024x701 at 0x7D6158534520>, <PIL.Image.Image image mode=RGB size=450x308 at 0x7D6158534430>, <PIL.Image.Image image mode=RGB size=1280x720 at 0x7D61585345B0>])], ['<|Assistant|>', '']], offset=0, sep_style=<SeparatorStyle.DeepSeek: 1>, sep='\n\n', sep2='', stop_str=['User:', ''], stop_token_ids=[100001])
- 该部分展示了如何使用
generate_prompt_with_history
函数生成包含图片的对话。
10. 总结
本文详细介绍了 DeepSeek-VL2 的环境配置、模型下载与运行、多 GPU 支持等内容。希望这篇指南能帮助您快速上手 DeepSeek-VL2。如果您有任何问题,欢迎在评论区留言讨论!
希望这篇博客对您有所帮助!