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.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
0.2 创建项目路径
运行如下命令创建并打开项目路径:
## 创建路径 mkdir langgpt ## 进入项目路径 cd langgpt
0.3 安装必要软件
运行下面的命令安装必要的软件:
apt-get install tmux
tmux 主要有以下几个重要作用:
一、实现多窗口管理
在终端操作中,你可以使用 tmux 创建多个窗口,每个窗口可以运行不同的任务。比如,你可以在一个窗口中进行代码编译,在另一个窗口中查看日志文件,在第三个窗口中运行服务器等。这样可以大大提高工作效率,避免频繁切换不同的终端窗口。二、会话持久化
即使你关闭了终端连接,tmux 中的会话仍然会在后台运行。当你再次打开终端并连接到 tmux 时,可以恢复到之前的会话状态,所有正在运行的任务都不会被中断。这对于长时间运行的任务或者需要在不同时间继续进行的工作非常有用。三、分屏功能
tmux 可以将一个窗口分割成多个窗格,每个窗格可以独立显示不同的内容。你可以根据自己的需要进行水平或垂直分屏,方便同时查看和操作多个任务。例如,你可以在一个屏幕上同时查看代码文件和命令输出。四、远程协作
在多人协作的场景中,tmux 可以让多个用户连接到同一个会话,共同操作和查看任务进度。这对于团队合作开发或者远程技术支持非常有帮助。总之,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 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
1.2 部署模型为OpenAI server
由于服务需要持续运行,需要将进程维持在后台,所以这里使用tmux
软件创建新的命令窗口。运行如下命令创建窗口:
tmux new -t langgpt
创建完成后,运行下面的命令进入新的命令窗口(首次创建自动进入,之后需要连接):
tmux a -t langgpt“tmux a” 通常是指连接(attach)到一个现存的 tmux 会话。
“-t langgpt” 表示指定要连接的会话名称为 “langgpt”。
所以整体意思就是连接到名为 “langgpt” 的 tmux 会话中,以便继续在这个会话中进行操作和查看该会话中正在运行的任务等。
进入命令窗口后,需要在新窗口中再次激活环境,命令参考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 OpenAIclient = 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": "请介绍一下你自己"}] )print(response.choices[0].message.content)
服务启动完成后,可以按Ctrl+B进入tmux
的控制模式,然后按D退出窗口连接,更多操作参考。
1.3 图形化界面调用
InternLM部署完成后,可利用提供的chat_ui.py
创建图形化界面,在实战营项目的tools项目中。
首先,从Github获取项目,运行如下命令:
git clone https://github.com/InternLM/Tutorial.git
下载完成后,运行如下命令进入项目所在的路径:
cd Tutorial/tools
进入正确路径后,运行如下脚本运行项目:
python -m streamlit run chat_ui.py
参考L0/Linux的2.3部分进行端口映射,在本地终端中输入映射命令,可以参考如下命令:
ssh -p {ssh端口,从InternStudio获取} root@ssh.intern-ai.org.cn -CNg -L 7860:127.0.0.1:8501 -o StrictHostKeyChecking=no
ssh -p 49726 root@ssh.intern-ai.org.cn -CNg -L 7860:127.0.0.1:7860 -o StrictHostKeyChecking=no
如果未配置开发机公钥,还需要输入密码,从InternStudio获取。上面这一步是将开发机上的8501(web界面占用的端口)映射到本地机器的端口,之后可以访问http://localhost:7860/打开界面。
启动后界面如下:
2. 提示工程(Prompt Engineering)
2.1 什么是Prompt
Prompt是一种用于指导以大语言模型为代表的生成式人工智能生成内容(文本、图像、视频等)的输入方式。它通常是一个简短的文本或问题,用于描述任务和要求。
Prompt可以包含一些特定的关键词或短语,用于引导模型生成符合特定主题或风格的内容。例如,如果我们要生成一篇关于“人工智能”的文章,我们可以使用“人工智能”作为Prompt,让模型生成一篇关于人工智能的介绍、应用、发展等方面的文章。
Prompt还可以包含一些特定的指令或要求,用于控制生成文本的语气、风格、长度等方面。例如,我们可以使用“请用幽默的语气描述人工智能的发展历程”作为Prompt,让模型生成一篇幽默风趣的文章。
总之,Prompt是一种灵活、多样化的输入方式,可以用于指导大语言模型生成各种类型的内容。
编辑
2.2 什么是提示工程
提示工程是一种通过设计和调整输入(Prompts)来改善模型性能或控制其输出结果的技术。
在模型回复的过程中,首先获取用户输入的文本,然后处理文本特征并根据输入文本特征预测之后的文本,原理为next token prediction。
提示工程是模型性能优化的基石,有以下六大基本原则:
- 指令要清晰
- 提供参考内容
- 复杂的任务拆分成子任务
- 给 LLM“思考”时间(给出过程)
- 使用外部工具
- 系统性测试变化
2.3 提示设计框架
-
CRISPE,参考:https://github.com/mattnigh/ChatGPT3-Free-Prompt-List
- Capacity and Role (能力与角色):希望 ChatGPT 扮演怎样的角色。
- Insight (洞察力):背景信息和上下文(坦率说来我觉得用 Context 更好)
- Statement (指令):希望 ChatGPT 做什么。
- Personality (个性):希望 ChatGPT 以什么风格或方式回答你。
- Experiment (尝试):要求 ChatGPT 提供多个答案。
写出的提示如下:
Act as an expert on software development on the topic of machine learning frameworks, and an expert blog writer. The audience for this blog is technical professionals who are interested in learning about the latest advancements in machine learning. Provide a comprehensive overview of the most popular machine learning frameworks, including their strengths and weaknesses. Include real-life examples and case studies to illustrate how these frameworks have been successfully used in various industries. When responding, use a mix of the writing styles of Andrej Karpathy, Francois Chollet, Jeremy Howard, and Yann LeCun.
-
CO-STAR,参考:CO-STAR Framework – AI Advisory Boards