目录
正文:
所有操作均在AI studio 开发机中实现
Intern Studio地址:https://studio.intern-ai.org.cn/
0 环境配置
-
流程:开发机创建——信息(name、cuda11.7、算力A100 *0.1)——进入
-
选择终端,配置(studio-conda命令相当于本地使用的conda创建虚拟环境–>激活环境–>安装torch)
studio-conda -o internlm-base -t demo # demo是虚拟环境名
# 与 studio-conda 等效的配置方案
# conda create -n demo python==3.10 -y
# conda activate demo
# conda install pytorch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2 pytorch-cuda=11.7 -c pytorch -c nvidia
- 进入环境demo环境,安装包
conda activate demo
== 一定不要忘记激活环境==
一种是复制粘贴安装库:
pip install huggingface-hub==0.17.3
pip install transformers==4.34
pip install psutil==5.9.8
pip install accelerate==0.24.1
pip install streamlit==1.32.2
pip install matplotlib==3.8.3
pip install modelscope==1.9.5
pip install sentencepiece==0.1.99
另一种是通过requirements.txt安装库,requirements.txt文件的内容:
huggingface-hub==0.17.3
transformers==4.34
psutil==5.9.8
accelerate==0.24.1
streamlit==1.32.2
matplotlib==3.8.3
modelscope==1.9.5
sentencepiece==0.1.99
安装指令 pip install -r requirements.txt
1 部署 InternLM2-Chat-1.8B
智能对话模型
1.1 课程内容:
(1)准备工作
环境配置,激活环境
(2) 代码流程
新建文件夹——在新建的文件夹内创建两个.py文件(cli_demo.py、download_mini.py)——进入新建的文件夹
mkdir -p /root/demo
cd /root/demo
touch cli_demo.py
touch download_mini.py
.py文件的内容
download_mini.py
内容如下:
# 通过modelscope 下载模型
import os
from modelscope.hub.snapshot_download import snapshot_download
# 创建保存模型目录
os.system("mkdir /root/models") # mkdir 是一个命令行工具, 系统会在 /root 目录下创建一个名为 models 的文件夹。
# save_dir是模型保存到本地的目录
save_dir="/root/models"
snapshot_download("Shanghai_AI_Laboratory/internlm2-chat-1_8b",
cache_dir=save_dir,
revision='v1.1.0')
通过控制台输入 python /root/demo/download_mini.py
运行
-
cli_demo.py
内容如下:运行demo,使用stream_chat接口
import torch from transformers import AutoTokenizer, AutoModelForCausalLM # 基本配置——tokenizer、model model_name_or_path = "/root/models/Shanghai_AI_Laboratory/internlm2-chat-1_8b" tokenizer = AutoTokenizer.from_pretrained(model_name_or_path, trust_remote_code=True, device_map='cuda:0') model = AutoModelForCausalLM.from_pretrained(model_name_or_path, trust_remote_code=True, torch_dtype=torch.bfloat16, device_map='cuda:0') model = model.eval() # 模板 system_prompt = """You are an AI assistant whose name is InternLM (书生·浦语). - InternLM (书生·浦语) is a conversational language model that is developed by Shanghai AI Laboratory (上海人工智能实验室). It is designed to be helpful, honest, and harmless. - InternLM (书生·浦语) can understand and communicate fluently in the language chosen by the user such as English and 中文. """ messages = [(system_prompt, '')] print("=============Welcome to InternLM chatbot, type 'exit' to exit.=============") while True: input_text = input("\nUser >>> ") input_text = input_text.replace(' ', '') if input_text == "exit": break length = 0 for response, _ in model.stream_chat(tokenizer, input_text, messages): if response is not None: print(response[length:], flush=True, end="") length = len(response)
AutoModelForCausalLM 是一个用于生成文本的语言模型,通常用于生成对话或文本序列。当你调用 model.stream_chat(tokenizer, input_text, messages) 时,其中的参数含义如下: tokenizer:用于将文本转换为模型可以理解的输入格式的分词器。 input_text:用户提出的问题或输入的文本,作为对话的开始或初始内容。 messages:一个包含对话历史的列表,通常是一个包含对话文本的元组列表。在这里,[(system_prompt, '')] 表示对话历史中只有一个系统提示(system_prompt),而没有用户消息。 在模型内部的运作方式如下: 输入处理:首先,将 input_text 和 messages 组合成一个完整的对话历史,这个对话历史将作为模型的输入。 文本生成:模型接收对话历史作为输入,然后生成下一个可能的文本序列。在生成对话时,模型会根据前面的对话历史和系统提示来预测接下来的文本。 循环生成:生成的文本可能会作为下一轮对话的一部分,然后再次输入模型中以生成更多文本。这个过程可以循环进行,模拟对话的连续性。 总的来说,messages 参数用于提供对话历史,以帮助模型更好地理解上下文并生成连贯的对话。模型会根据这些历史消息和系统提示来生成接下来的文本,从而模拟对话的进行。
激活环境运行:
python /root/demo/cli_demo.py
紧接着西游记大结局,请创作一个 300 字的小故事
1.2 课程作业
使用
InternLM2-Chat-1.8B
模型生成 300 字的小故事(需截图)
过程如上所述,结果如下:
原本想让模型写一个西游记中师徒四人取得真经后的后续故事,但是感觉不太好,后来直接提问写一个300字的小故事
,感觉还可以。发现这两种不同的提问方式,故事输出的排版也不相同,不知是否是训练数据造成的影响。
2 部署 八戒-Chat-1.8B
模型
2.1 课程
(1)准备工作
- 激活环境
conda activate demo
- 克隆仓库内的 Demo 文件
cd /root/
git clone https://gitee.com/InternLM/Tutorial -b camp2
# git clone https://github.com/InternLM/Tutorial -b camp2
cd /root/Tutorial
这个命令的意思是从指定的 Gitee 存储库中克隆名为 camp2 的分支的代码到本地计算机。这将在本地创建一个名为 Tutorial 的文件夹,并将存储库中 camp2 分支的代码克隆到该文件夹中。
-
运行
python /root/Tutorial/helloworld/bajie_download.py
(2)开启服务
-
服务指令,服务的端口号设置为6006。
streamlit run /root/Tutorial/helloworld/bajie_chat.py --server.address 127.0.0.1 --server.port 6006
-
ssh 映射到本地
step1:查看开发机器ssh的端口
step2:使用快捷键组合Windows + R
(Windows 即开始菜单键)打开PowerShell
,并输入命令,按下回车键。
# 从本地使用 ssh 连接 studio 端口
# 将下方端口号 xxxx 替换成自己的端口号
ssh -CNg -L 6006:127.0.0.1:6006 [email protected] -p xxxx
ssh链接指令解释
by chatGPT
ssh -CNg -L 6006:127.0.0.1:6006 [email protected] -p xxxx
这串指令是一个 SSH 命令,用于建立一个 SSH 隧道(SSH tunnel)。让我解释一下这个命令的各个部分的含义:
- `ssh`: 这是用于启动 SSH 连接的命令。
- `-C`: 这是 SSH 的一个选项,用于开启压缩。 `-C` 选项会使用压缩算法来加速数据传输。
- `-N`: 这是 SSH 的另一个选项,表示不执行任何远程命令。这在你只需要建立 SSH 连接,而不需要在远程主机上执行任何命令时很有用。
- `-g`: 这个选项允许远程主机连接到本地端口转发的端口,这在你希望其他主机也能访问该隧道时很有用。
- `-L 6006:127.0.0.1:6006`: 这部分指定了本地端口转发。具体来说,它将本地主机的端口 6006 映射到远程主机的 127.0.0.1 地址(即远程主机本身)的端口 6006。这意味着当你连接到本地主机的端口 6006 时,实际上是连接到了远程主机的端口 6006。
- `[email protected]`: 这是远程主机的用户名和主机名。在这个例子中,用户名是 `root`,主机名是 `ssh.intern-ai.org.cn`。
- `-p xxxx`: 这个选项指定了 SSH 连接的端口号。在这里,SSH 连接将通过端口 xxxx 连接到远程主机。
综合起来,这个命令的作用是建立一个 SSH 隧道,将本地主机的端口 6006 映射到远程主机的端口 6006,允许通过本地端口访问远程主机上的服务或应用程序。
(3)本地对话
本地浏览器打开127.0.0.1:6006
地址,进行对话。
2.2 作业
熟悉
huggingface
下载功能,使用huggingface_hub
python 包,下载InternLM2-Chat-7B
的config.json
文件到本地(需截图下载过程)
- 安装
huggingface_hub
包:
pip install huggingface_hub
snapshot_download
、hf_hub_download()
、hf_hub_url
、huggingface-cli
等方式均可下载InternLM2-Chat-7B
模型的config.json
文件:
服务器更换了HF的镜像:https://hf-mirror.com/internlm/internlm2-chat-7b/resolve/main/config.json
snapshot_download
、hf_hub_download()
下载都会嵌套几层路径,hf_hub_url
、huggingface-cli
直接下载json文件。
详细脚本如下:
(1)snapshot_download
- snapshot_download 过滤文件。文件位于
*/model/models--internlm--internlm2-chat-7b/snapshots/4275caa205dbb8ff83930e2c1ce6bc62ec49329c/
目录下。
import os
from huggingface_hub import snapshot_download
# 指定模型 ID 和本地存放路径
model = "internlm/internlm2-chat-7b" # HF模型位置
cache_dir = "./" # 存放位置
file_name = "config.json" # 过滤文件"*.json"
from huggingface_hub import snapshot_download
snapshot_download(repo_id=model, allow_patterns=file_name, cache_dir=cache_dir)
print("完成")
文件的位置在test/models--internlm--internlm2-chat-7b/snapshots/4275caa205dbb8ff83930e2c1ce6bc62ec49329c/config.json
(2)hf_hub_download
-
hf_hub_download
单个文件下载。文件位于*/model/models--internlm--internlm2-chat-7b/snapshots/4275caa205dbb8ff83930e2c1ce6bc62ec49329c/
目录下。from huggingface_hub import hf_hub_download hf_hub_download(repo_id="internlm/internlm2-chat-7b", cache_dir = "./model" , filename="config.json") print("下载完成!")
文件位置:test/model/models--internlm--internlm2-chat-7b/snapshots/4275caa205dbb8ff83930e2c1ce6bc62ec49329c/config.json
(3)hf_hub_url
hf_hub_url
地址请求下载:文件存放的位置就是实际设置的位置
import os
import requests
from huggingface_hub import hf_hub_url
def download_model_to_folder(model_name, local_folder):
# 确保本地文件夹存在
os.makedirs(local_folder, exist_ok=True)
# 指定要下载的文件名
file_name = "config.json"
# 构建下载链接
url = hf_hub_url(model_name, filename=file_name)
print(url)
# 下载文件
response = requests.get(url)
if response.status_code == 200:
file_path = os.path.join(local_folder, file_name)
with open(file_path, 'wb') as f:
f.write(response.content)
print(f"文件 {file_name} 下载成功!")
else:
print(f"下载文件 {file_name} 失败。")
# 指定模型名称和本地文件夹路径
model_name = "internlm/internlm2-chat-7b"
local_folder = "./"
# 调用函数下载文件到指定文件夹
download_model_to_folder(model_name, local_folder)
(4)huggingface-cli
huggingface-cli
仅下载json文件。
import os
# os.environ["HF_ENDPOINT"] = "https://hf-mirror.com" # 设置为hf的国内镜像网站
os.system("huggingface-cli download --resume-download internlm/internlm2-chat-7b config.json --local-dir './' ") # 相当于控制台输入指令
print("done!")
"""
resume-download:断点续下
文件名
local-dir:本地存储路径。
"""
标签:第二课,hub,root,part1,download,model,hf,浦语,name
From: https://blog.csdn.net/weixin_49374605/article/details/137399737