一 背景
日常在我们开发学习过程中,如果我们需要对大模型进行本地部署验证的话,会需要一个GPU环境,目前用的比较多的是PAI平台。人工智能平台 PAI(Platform for AI,原机器学习平台PAI)是面向开发者和企业的机器学习/深度学习工程平台,提供包含数据标注、模型构建、模型训练、模型部署、推理优化在内的AI开发全链路服务。主要产品如下图所示。并且PAI目前提供了针对新用户的免费试用,可以申请免费使用。本次我们就以DSW为例,本地部署Qwen大模型进行推理验证。
二 环境设置
打开PAI的阿里云页面进行点击试用,可以看到DSW提供了3个月的免费试用。我们点击申请试用即可。
由于我们申请的免费试用产品,只支持按照资源包抵扣,所以我们其中在选择GPU规格的时候,记得选择支持资源包抵扣的GPU类型,如下图所示,我们只是本地学习,所以选择A10的即可,镜像选择默认的modelscope镜像即可。
创建完成后,整体页面如下图所示,现在就可以进行开发了。
可以从后台看到当前免费资源消耗的清理。
三 Qwen推理验证
1. 推理验证
测试代码如下,我们使用modelscope进行下载模型镜像,这里我们选择Qwen1.5-7B-Chat进行验证。
from modelscope import AutoModelForCausalLM, AutoTokenizer device = "cuda" # the device to load the model onto # Now you do not need to add "trust_remote_code=True" model = AutoModelForCausalLM.from_pretrained( "Qwen/Qwen1.5-7B-Chat", torch_dtype="auto", device_map="auto" ) tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen1.5-7B-Chat") # Instead of using model.chat(), we directly use model.generate() # But you need to use tokenizer.apply_chat_template() to format your inputs as shown below prompt = "你好,你是谁?" messages = [ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": prompt} ] text = tokenizer.apply_chat_template( messages, tokenize=False, add_generation_prompt=True ) model_inputs = tokenizer([text], return_tensors="pt").to(device) # Directly use generate() and tokenizer.decode() to get the output. # Use `max_new_tokens` to control the maximum output length. generated_ids = model.generate( model_inputs.input_ids, max_new_tokens=512 ) generated_ids = [ output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids) ] response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0] print(response)
运行结果如下图所示
2. 部署验收
这里使用vllm进行部署验证,借助vLLM,构建一个与OpenAI API兼容的API服务十分简便,该服务可以作为实现OpenAI API协议的服务器进行部署。默认情况下,它将在 http://localhost:8000 启动服务器。可以通过 --host 和 --port 参数来自定义地址。
首先安vllm命令如下:
pip install vllm
然后运行命令如下启动服务
python -m vllm.entrypoints.openai.api_server --model Qwen/Qwen1.5-7B-Chat
运行后如果遇到报错如下,可以先暂时设置 --max-model-len 7600解决
设置后的命令如下:
python -m vllm.entrypoints.openai.api_server --model Qwen/Qwen1.5-7B-Chat --max-model-len 7600
运行成功后,可以通过暴露的端口号进行请求,请求命令如下
curl http://localhost:8000/v1/chat/completions -H "Content-Type: application/json" -d '{ "model": "Qwen/Qwen1.5-7B-Chat", "messages": [ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": "你是谁"} ] }'
运行效果如下:
这样我们就可以按照OpenAI的客户端接口进行请求验证,
首先安装OpenAI
pip install OpenAI
验证代码如下:
from openai import OpenAI # Set OpenAI's API key and API base to use vLLM's API server. openai_api_key = "EMPTY" openai_api_base = "http://localhost:8000/v1" client = OpenAI( api_key=openai_api_key, base_url=openai_api_base, ) chat_response = client.chat.completions.create( model="Qwen/Qwen1.5-7B-Chat", messages=[ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": "你是谁"}, ] ) print("Chat response:", chat_response)
3. 微调验证
微调验证我们使用LLaMA-Factory进行微调,使用如下:
git clone https://github.com/hiyouga/LLaMA-Factory.git cd LLaMA-Factory pip install -r requirements.txt #在阿里云上需要执行以下命令 export GRADIO_ROOT_PATH=/${JUPYTER_NAME}/proxy/7860/ #其他环境不需要执行以上命令 python src/train_web.py
点击链接打开训练截图如下:
页面上提供了训练的各个参数,可以按照页面选项进行微调验证。