首页 > 其他分享 >搭建一个大模型API服务

搭建一个大模型API服务

时间:2024-03-01 10:33:19浏览次数:19  
标签:type 模型 API 版本 query model swift 搭建

搭建一个大模型API服务

本文将介绍如何使用SWIFT框架搭建一个大模型API服务,以方便后续做RAG、Agent的开发工作。

环境准备

基础环境

  • 操作系统:Ubuntu 18.04.5 LTS (GNU/Linux 3.10.0-1127.el7.x86_64 x86_64)
  • Anaconda3:Anaconda3-2023.03-1-Linux-x86_64
  • 根据服务器网络情况配置好conda源和pip源,此处使用的是超算山河源

创建一个新的conda环境:

conda create --name swift python=3.8

激活刚刚创建的conda环境:

conda activate swift

下载SWIFT源码:

git clone https://github.com/modelscope/swift.git

切换到SWIFT路径:

cd /yldm0226/swift

安装SWIFT:

pip install -e .[llm]

检查服务器cuda版本是否与当前安装的pytorch对应,如果不对应,需要将pytorch版本降低到≤服务器cuda版本;使用nvidia-smi查看cuda版本:

当前cuda版本为11.7; 然后使用conda list检查swift环境中pytorch的版本:

pytorch版本为2.2.0,从官网查询可知2.2.0版本最低支持的cuda版本为11.8,这大于服务器cuda版本11.7,因此需要将pytorch降低到支持cuda11.7的版本,从官网查询可知目前最高的可支持cuda11.7的版本为2.0.1。执行下述命令更换pytorch版本:

pip install torch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2

注:如果pytorch版本与服务器cuda版本不对应,程序不会报错,而是会输出下面的警告,此时SWIFT会将模型权重加载到CPU上。推理速度非常慢:

UserWarning: CUDA initialization: The NVIDIA driver on your system is too old (found version 11070). Please update your GPU driver by downloading and installing a new version from the URL: http://www.nvidia.com/Download/index.aspx Alternatively, go to: https://pytorch.org to install a PyTorch version that has been compiled with your version of the CUDA driver. (Triggered internally at ../c10/cuda/CUDAFunctions.cpp:108.)

将大模型权重下载到本地,可以在

选择对应模型下载,这里以Qwen1.5-14B-Chat为例:

git clone https://www.modelscope.cn/qwen/Qwen1.5-72B-Chat.git

搭建API服务

启动服务端

单卡部署

CUDA_VISIBLE_DEVICES=0 swift deploy --model_type qwen1half-14b-chat --model_id_or_path /yldm0226/models/Qwen1.5-14B-Chat

CUDA_VISIBLE_DEVICES可以指定使用哪块GPU进行部署;model_type表示你选择的模型类型,类型需是SWIFT框架支持的模型种类的一种,可以在

查询所有支持的模型;--model_id_or_path表示模型在ModelScope Hub中的model_id或者本地路径,当指定本地路径时,代码会优先加载本地路径中的模型权重。

部署成功后,可以看到以下输出:

INFO:     Started server process [82478]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)

多卡部署

RAY_memory_monitor_refresh_ms=0 CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 swift deploy --model_type qwen1half-14b-chat --model_id_or_path /yldm0226/models/Qwen1.5-14B-Chat --tensor_parallel_size 8

同样的,在部署成功后可以看到以下输出:

INFO:     Started server process [100001]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)

可以通过nvidia-smi命令查看多卡部署的显存占用情况:

客户端测试

curl

想要快速测试API的可用性,可以使用curl:

curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "qwen1half-14b-chat",
"messages": [{"role": "user", "content": "请介绍一下API服务"}],
"max_tokens": 1024,
"temperature": 0
}'

model与部署时的model_type一致。

可以得到下面形式的响应:

{"model":"qwen1half-14b-chat","choices":[{"index":0,"message":{"role":"assistant","content":"API(Application Programming Interface,应用程序编程接口)服务是一种接口,它允许不同的软件应用程序之间进行交互和数据共享。API是一组预定义的规则、协议和工具,开发者可以使用它来调用或访问某个应用程序、平台或服务的功能,而无需了解其底层实现细节。简单来说,它就像一个“桥梁”,使得开发者能够编写自己的程序,通过这个接口来获取数据、执行操作或者触发特定功能。\n\nAPI服务通常分为以下几种类型:\n\n1. **Web API**:基于HTTP协议,用于Web应用间的通信,如RESTful API,它以HTTP请求(GET、POST、PUT、DELETE等)的形式发送数据。\n\n2. **SDK API**:软件开发工具包(Software Development Kit)中的API,提供了特定平台或服务的编程接口,如Google Maps API、Facebook API等。\n\n3. **企业级API**:企业内部或外部提供的API,用于内部系统集成,如CRM系统API、支付API等。\n\n4. **机器学习/AI API**:如Google Cloud的机器学习API,允许开发者使用预训练模型进行预测或处理任务。\n\n5. **API Gateway**:一种服务,它集中管理多个API,提供安全、路由、缓存等功能,如AWS API Gateway。\n\n通过API服务,开发者可以快速地扩展功能、集成第三方服务,提高开发效率,同时促进了软件生态系统的繁荣。"},"finish_reason":null}],"usage":{"prompt_tokens":23,"completion_tokens":294,"total_tokens":317},"id":"chatcmpl-f7fa52fbf7de45f1bc1a31e369482a19","object":"chat.completion","created":1709258739}

swift

也可以使用swift框架去编写客户端代码,下面是一个简单的示例:

from swift.llm import get_model_list_client, XRequestConfig, inference_client

model_list = get_model_list_client()
model_type = model_list.data[0].id
print(f'model_type: {model_type}')

# 直接输出
query = '山东的省会在哪里?'
request_config = XRequestConfig(seed=42)
resp = inference_client(model_type, query, request_config=request_config)
response = resp.choices[0].message.content
print(f'query: {query}')
print(f'response: {response}')

# 流式输出
history = [(query, response)]
query = '这有什么好吃的?'
request_config = XRequestConfig(stream=True, seed=42)
stream_resp = inference_client(model_type, query, history, request_config=request_config)
print(f'query: {query}')
print('response: ', end='')
for chunk in stream_resp:
    print(chunk.choices[0].delta.content, end='', flush=True)
print()

第一个问题'山东的省会在哪里?'使用的是直接返回response的方式,第二个问题'这有什么好吃的?'使用的是流式输出的方式,可以根据需要选择对应的方式。

运行程序,可以得到以下输出:

query: 山东的省会在哪里?
response: 山东省的省会是济南。
query: 这有什么好吃的?
response: 山东作为中国的一个大省,美食丰富多样,这里有许多著名的特色菜肴和小吃。以下是一些你可能会感兴趣的:

1. 热干面(不是山东本地的,但济南也有人喜欢):源于武汉,但在山东也有类似面食。
2. 鲁菜:山东菜系,以济南菜为代表,如糖醋黄河鲤鱼、九转大肠、葱烧海参、锅包肉等,口味偏重,讲究原汁原味。
3. 烤鸭:虽然以北京最有名,但山东济南的烤鸭店也有特色。
4. 鲅鱼水饺:山东沿海城市如青岛的特色,用新鲜鲅鱼做馅,鲜美可口。
5. 豆腐脑:搭配薄饼、香菜、榨菜,是早餐的常见选择。
6. 煎饼:山东大煎饼,尤其是临沂煎饼,薄脆可卷各种食材。
7. 油旋:济南特色小吃,类似油条但更细,酥脆可口。

这只是冰山一角,山东各地还有许多其他美食,如鲁西南驴肉火烧、莱阳梨、胶东海鲜等,去山东旅行不妨尝试一下。

标签:type,模型,API,版本,query,model,swift,搭建
From: https://www.cnblogs.com/yourenbo/p/18046379

相关文章

  • 万字长文学会对接 AI 模型:Semantic Kernel 和 Kernel Memory,工良出品,超简单的教程
    万字长文学会对接AI模型:SemanticKernel和KernelMemory,工良出品,超简单的教程目录万字长文学会对接AI模型:SemanticKernel和KernelMemory,工良出品,超简单的教程配置环境部署one-api配置项目环境模型划分和应用场景聊天提示词引导AI回复指定AI回复特定格式模板化提示......
  • Linux 环境下搭建 ElasticSearch
    centos8环境下搭建ElasticSearch7.8一、安装:复制下载链接地址,并使用wget命令下载对应的压缩包。例如:wgethttps://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.8.0-linux-x86_64.tar.gz下载完成后,解压压缩包:tar-xzvfelasticsearch-7.8.0-linux-x86......
  • 【Filament】加载obj和fbx模型
    1前言​3D模型的常用格式主要有obj、fbx、gltf等,Filament中的filamesh.exe工具可以将obj、fbx格式转换为filamesh格式,然后再加载显示。对于gltf格式模型,可以通过ModelViewer加载显示,这不在本文的讨论范围内。​1)filamesh简介​filamesh工具的官方......
  • YUM以及yum源搭建
    1YUM简介1.1YUM简介CentOS使用yum和dnf解决rpm的包依赖关系。YUM:rpm的前端程序,可解决软件包相关依赖性,可在多个库之间定位软件包,up2date的替代工具,CentOS8使用dnf代替了yum,不过保留了和yum的兼容性,配置也是通用的。YUM的前身是YUP(YellowdogUpdater,YellowdogLinux......
  • 【JAVA】百度AI接入api使用流程-【黑图像上色】【步骤2】
    前言:根据API文档中java代码,使用idea编辑代码22.1进入网页,找到java代码https://cloud.baidu.com/doc/IMAGEPROCESS/s/Bk3bclns3 2.2新建java项目     2.3创建java类命名为 Colourize(就是刚才在网页里看到的Java代码的类名)  复制java代码  ......
  • 【Azure APIM】验证APIM删除后的恢复步骤
    问题描述在Azure门户中,误删除APIManagement资源后,怎么办? 问题解答遇见误删除的第一反应就是:想恢复删除的内容,但是从门户上查看没有发现有可以操作的方面。(错误,AzureAPIM门户已经支持“一键恢复”功能:RecoverdeletedAPIManagementservice-MicrosoftAzure由世纪......
  • 如何快速在钉钉群接入私有大模型
    利用阿里云计算巢Appflow,通过控制台配置即可顺利将您自己开发或微调的大模型接入钉钉或其他通信软件群聊,帮您解决以下各类场景的模型调用需求:在钉钉群接入自己微调的领域大模型做问答或智能答疑;微调后的大模型在钉钉群或其他群聊中共同测试效果......仅需简单几步,即可完成......
  • 【JAVA】百度AI接入api使用流程-【黑图像上色】【步骤1】
    前言以【黑白图像上色】为例讲解百度AI接口使用,方便新手小白接入,以超级简单的方式操作百度AI库使用步骤1.创建应用获取AK(APIKey),SK(SecretKey)1.1进入: 百度AI官网,在开放能力下面找到:黑白图像上色 1.2选择:立即使用 1.3在创建新应用下,填写相应的信息。注意:接口选择......
  • 【转】打造大模型Agent:百度智能云千帆杯竞赛第一期解题思路
    随着大型语言模型的进步,使用大模型构建人工智能代理(AIAgents)逐渐成为学术界和业界关注的领域。在这些新兴的研究中,大型语言模型扮演着人工智能代理的核心智能,即它们的“大脑”。这些基于大型语言模型的智能代理(LLM-basedAgents)通过集成了先进的语言理解和生成能力的模型,展现出在......
  • 深度学习-卷积神经网络-keras生成器训练模型-51
    目录1.模型的定义2.图片batchgenerator3.模型训练1.模型的定义fromkeras.applications.inception_v3importInceptionV3fromkeras.modelsimportModelfromkeras.layersimportDense,GlobalAvgPool2Dfromkeras.optimizersimportRMSprop"""在AlexNet及其之前......