多模态DeepSeek大模型的本地化部署
《DEEPSEEK原生应用与智能体开发实践 图书》【摘要 书评 试读】- 京东图书
本文指导读者如何在本地机器上成功安装和配置DeepSeek-VL2模型。这包括了环境准备、依赖安装以及模型文件的正确放置等步骤。我们将确保读者能够顺利地搭建起一个可用于学习和实验的本地环境。首先我们可以登录GitHub完成DeepSeek-VL2的代码下载。为了简便起见,我们在这里提供了下载好的代码,如下所示:
import torch
from transformers import AutoModelForCausalLMfrom deepseek_vl2.models import DeepseekVLV2Processor, DeepseekVLV2ForCausalLM
from deepseek_vl2.utils.io import load_pil_imagesmodel_path = "deepseek-ai/deepseek-vl2-tiny"
vl_chat_processor: DeepseekVLV2Processor = DeepseekVLV2Processor.from_pretrained(model_path)
tokenizer = vl_chat_processor.tokenizervl_gpt: DeepseekVLV2ForCausalLM = AutoModelForCausalLM.from_pretrained(model_path, trust_remote_code=True)
vl_gpt = vl_gpt.to(torch.bfloat16).cuda().eval()conversation = [{"role": "<|User|>","content": "This is image_1: <image>\n""This is image_2: <image>\n""This is image_3: <image>\n 请告诉我这幅画里面画的是什么?","images": ["images/multi_image_1.jpeg","images/multi_image_2.jpeg","images/multi_image_3.jpeg",],},{"role": "<|Assistant|>", "content": ""}
]pil_images = load_pil_images(conversation)
prepare_inputs = vl_chat_processor(conversations=conversation,images=pil_images,force_batchify=True,system_prompt=""
).to(vl_gpt.device)with torch.no_grad():inputs_embeds = vl_gpt.prepare_inputs_embeds(**prepare_inputs)inputs_embeds, past_key_values = vl_gpt.incremental_prefilling(input_ids=prepare_inputs.input_ids,images=prepare_inputs.images,images_seq_mask=prepare_inputs.images_seq_mask,images_spatial_crop=prepare_inputs.images_spatial_crop,attention_mask=prepare_inputs.attention_mask,chunk_size=512 )outputs = vl_gpt.generate(inputs_embeds=inputs_embeds,input_ids=prepare_inputs.input_ids,images=prepare_inputs.images,images_seq_mask=prepare_inputs.images_seq_mask,images_spatial_crop=prepare_inputs.images_spatial_crop,attention_mask=prepare_inputs.attention_mask,past_key_values=past_key_values,pad_token_id=tokenizer.eos_token_id,bos_token_id=tokenizer.bos_token_id,eos_token_id=tokenizer.eos_token_id,max_new_tokens=512,do_sample=False,use_cache=True,)answer = tokenizer.decode(outputs[0][len(prepare_ inputs.input_ids[0]):].cpu().tolist(), skip_special_tokens=False)print(f"{prepare_inputs['sft_format'][0]}", answer)
在本例中,我们定义了model_path = "deepseek-ai/deepseek-vl2-tiny",即使用一个迷你版本的DeepSeek-VL2进行模型设计,由于模型的权重和编码器需要从网上下载,对于下载有困难的读者,我们在配套代码库中准备了下载好的权重与文件,读者可以直接更改model_path地址到本地。代码如下所示:
model_path = "C:/Users/xiaohua/.cache/huggingface/hub/models--deepseek-ai--deepseek-vl2-tiny/snapshots/66c54660eae7e90c9ba259bfdf92d07d6e3ce8aa"
对于使用Windows系统的读者而言,在实际应用过程中,鉴于操作系统的差异性,读者可能需要手动安装一些必要的Python辅助包以确保程序的顺利运行。这里主要涉及两个关键的安装包,具体如下:
from flash_attn import flash_attn_qkvpacked_funcfrom xformers.ops import memory_efficient_attention
这里分别使用了flash_attn与xformers完成作为特殊的注意力架构,其中xformers可以使用如下的代码进行安装,如下所示:
pip install -U xformers --index-url https://download.pytorch.org/whl/cu118
上面安装代码建议使用PyTorch 2.6.0 + CUDA 11.8 + NVDIA3090。对于50系显卡暂时无法使用,具体安装的版本,读者可以自行斟酌。
对于flash_attn的安装,Windows版本的flash_attn无法直接安装,读者可以使用本书配套代码库中作者编译好的flash_attn安装,从而完成本地化的部署。或者读者可以到下面网站
https://github.com/Dao-AILab/flash-attention/releases/
选择如图12-5所示编译好的flash_attn包进行下载安装。
图12-5 编译好的Windows系统flash_attn安装包
同样,读者需要在安装时注意CUDA和PyTorch版本,具体使用上需要自行斟酌。