浦语提示词工程实践(LangGPT版,服务器上部署internlm2-chat-1_8b,踩坑很多才完成的详细教程,)
首先,在InternStudio平台上创建开发机。
创建成功后点击进入开发机打开WebIDE。进入后在WebIDE的左上角有三个logo,依次表示JupyterLab、Terminal和Code Server,我们使用Terminal就行。(JupyterLab可以直接看文件夹)
首先点击左上角图标,打开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.3pip install streamlit==1.37.0
pip install huggingface_hub==0.24.3
pip install openai==1.37.1
pip install lmdeploy==0.5.2
如果使用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 osos.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
本文使用intern-studio开发机
部署模型为OpenAI server
运行下面的命令安装必要的软件:
apt-get install tmux
由于服务需要持续运行,需要将进程维持在后台,所以这里使用tmux软件创建新的命令窗口。运行如下命令创建窗口:
tmux new -t langgpt
tmux new -t langgpt
是 Tmux(Terminal Multiplexer)命令行工具的一个命令,它的作用是在一个新的窗口中启动一个会话,并且该会话的名称为 langgpt
。 具体来说: - tmux new
表示创建一个新的会话窗口。 - -t langgpt
表示给这个新的会话窗口指定一个名字 langgpt
。 这个命令通常用于在终端中同时运行多个会话,可以通过不同的窗口来切换不同的任务或环境。例如,在开发过程中,你可能需要在同一个终端中同时运行编译器、编辑器和终端模拟器等多个应用,这时就可以使用 Tmux 来管理这些会话窗口。 当你执行 tmux new -t langgpt
命令后,Tmux 会创建一个新的窗口,并且将你放到这个新的窗口中,同时这个窗口的名称为 langgpt
。你可以在这个窗口中执行任何命令,而不会影响其他的窗口。当你想要切换到其他的窗口时,可以使用 tmux switch-window
或者 tmux switch -t <窗口名>
命令来实现。
创建完成后,运行下面的命令进入新的命令窗口(首次创建自动进入不用再输入,之后进入的话需要运行下面的代码):
tmux a -t langgpt
tmux a -t langgpt
是 Tmux(Terminal Multiplexer)命令行工具的另一个命令,它的作用是附加(attach)到名为 langgpt
的会话中。 具体来说: - tmux a
表示附加到一个已存在的会话窗口。 - -t langgpt
表示附加到名为 langgpt
的会话窗口。 当你执行 tmux a -t langgpt
命令后,Tmux 会将你附加到名为 langgpt
的会话窗口中,这样你就可以继续在该会话窗口中的命令行中进行操作。如果你之前已经通过 tmux new -t langgpt
命令创建了这个会话窗口,那么使用 tmux a -t langgpt
命令就可以回到这个窗口,继续之前的工作。 需要注意的是,如果你尝试附加到一个不存在的会话窗口,或者当前已经附加到了一个会话窗口,那么 Tmux 会提示你无法附加或者你已经附加到了一个会话窗口。在这种情况下,你可以使用 tmux list-sessions
命令查看当前存在的会话窗口,然后选择一个合适的会话窗口进行附加。
运行下面的命令,激活刚创建的虚拟环境:
conda activate langgpt
使用LMDeploy进行部署,参考如下命令:
CUDA_VISIBLE_DEVICES=0 lmdeploy serve api_server /share/new_models/Shanghai_AI_Laboratory/internlm2-chat-1_8b --server-port 23333 --api-keys internlm
服务启动完成后,可以按Ctrl+B进入tmux的控制模式,然后按D退出这个窗口返回先前的窗口.
可以用下面的python代码测试:
from openai import OpenAIclient = OpenAI(api_key = "internlm",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": "请介绍一下你自己"}]
)print(response.choices[0].message.content)
图形化界面调用
InternLM部署完成后,可利用提供的chat_ui.py创建图形化界面,在实战营项目的tools项目中。
首先,从Github获取项目,运行如下命令:
git clone -b camp3 https://github.com/InternLM/Tutorial.git
命令解释:下载camp3分支的代码
下载完成后,运行如下命令进入项目所在的路径:
cd Tutorial/tools
进入正确路径后,运行如下脚本运行项目:
python -m streamlit run chat_ui.py
注意,下面是在本地电脑里的powershell里运行,不是在上述的terminal中运行了:
ssh -p {ssh端口,从InternStudio获取} root@ssh.intern-ai.org.cn -CNg -L 7860:127.0.0.1:8501 -o StrictHostKeyChecking=no
ssh:这是安全外壳协议的命令,用于启动一个安全会话。
-p 36356:指定连接到远程服务器的端口。默认的 SSH 端口是 22,但这里指定了 36356 作为连接端口。
root@ssh.intern-ai.org.cn:这是指定要连接的远程服务器的用户和地址。这里,用户是 root,服务器地址是 ssh.intern-ai.org.cn。
-L 7860:127.0.0.1:8501:这是本地端口转发选项。它告诉 SSH 将本地机器(客户端)的端口 7860 转发到远程服务器上的 127.0.0.1 地址的端口 8501。这意味着任何连接到本地机器端口 7860 的连接都会被转发到远程服务器上的端口 8501。
-o StrictHostKeyChecking=no:这是一个 SSH 配置选项,告诉 SSH 在连接到新的或更改过的服务器时不要进行严格的主机密钥检查。这通常用于自动化脚本,但不建议用于生产环境,因为它会降低安全性。
ssh -p 36356 root@ssh.intern-ai.org.cn -CNg -L 7860:127.0.0.1:8501 -o StrictHostKeyChecking=no
如果未配置开发机公钥,还需要输入密码,从InternStudio获取。上面这一步是将开发机上的8501(web界面占用的端口)映射到本地机器的端口,之后可以访问http://localhost:7860/