0. 前期准备
如果在之前的课程中,完成了开发机创建、环境配置等工作,可以跳过0.1部分,也可以继续阅读以温习。
首先,学习前置基础内容的Linux部分,并在InternStudio平台上创建开发机。
创建成功后点击进入开发机
打开WebIDE。进入后在WebIDE的左上角有三个logo,依次表示JupyterLab、Terminal和Code Server,本节需要使用Terminal和Code Server。
0.1 环境配置
首先打开Terminal,运行如下脚本创建虚拟环境:
# 创建虚拟环境
conda create -n langgpt python=3.10 -y
运行下面的命令,激活虚拟环境:
conda activate langgpt
之后的操作都要在这个环境下进行。激活环境后,安装必要的Python包,依次运行下面的命令:
# 安装一些必要的库
conda install pytorch==2.1.2 torchvision==0.16.2 torchaudio==2.1.2 pytorch-cuda=12.1 -c pytorch -c nvidia -y
# 安装其他依赖
pip install transformers==4.43.3
pip install streamlit==1.37.0
pip install huggingface_hub==0.24.3
pip install openai==1.37.1
pip install lmdeploy==0.5.2
0.2 创建项目路径
运行如下命令创建并打开项目路径:
## 创建路径
mkdir langgpt
## 进入项目路径
cd langgpt
所有实验均在该路径下完成!
0.3 安装必要软件
运行下面的命令安装必要的软件:安装后台软件
apt-get install tmux
1. 模型部署
这部分基于LMDeploy将开源的InternLM2-chat-1_8b模型部署为OpenAI格式的通用接口。
1.1 获取模型
-
如果使用intern-studio开发机,可以直接在路径
/share/new_models/Shanghai_AI_Laboratory/internlm2-chat-1_8b
下找到模型
-
如果不使用开发机,可以从huggingface上获取模型,地址为:https://huggingface.co/internlm/internlm2-chat-1_8b
可以使用如下脚本下载模型:
from huggingface_hub import login, snapshot_download
import os
os.environ['HF_ENDPOINT'] = 'https://hf-mirror.com'
login(token=“your_access_token")
models = ["internlm/internlm2-chat-1_8b"]
for model in models:
try:
snapshot_download(repo_id=model,local_dir="langgpt/internlm2-chat-1_8b")
except Exception as e:
print(e)
pass
1.2 部署模型为OpenAI server
由于服务需要持续运行,需要将进程维持在后台,所以这里使用tmux
软件创建新的命令窗口。运行如下命令创建窗口:
tmux new -t langgpt
创建完成后,运行下面的命令进入新的命令窗口(首次创建自动进入,之后需要连接):
tmux a -t langgpt
进入命令窗口后,需要在新窗口中再次激活环境,命令参考0.1节。然后,使用LMDeploy进行部署,参考如下命令:
使用LMDeploy进行部署,参考如下命令:
CUDA_VISIBLE_DEVICES=0 lmdeploy serve api_server /share/new_models/Shanghai_AI_Laboratory/internlm2-chat-1_8b --server-port 23333 --api-keys internlm2
更多设置,可以参考:Welcome to LMDeploy’s tutorials! — lmdeploy
部署成功后,可以利用如下脚本调用部署的InternLM2-chat-1_8b模型并测试是否部署成功。
from openai import OpenAI
client = OpenAI(
api_key = "internlm2",
base_url = "http://0.0.0.0:23333/v1"
)
response = client.chat.completions.create(
model=client.models.list().data[0].id,
messages=[
{"role": "system", "content": "请介绍一下你自己"}
]
)
pr