通过Github Codespace下载InternLM模型并运行
本篇博客是记录《书生大模型实战营第四期-玩转HF/魔搭/魔乐》章节的闯关任务从HF上下载模型文件,对实战营感兴趣的小伙伴也可以扫码报名哦。
一、通过模版创建Codespace环境
访问codespace 点击Jupyter Notebook 模版的"Use this template"使用该模版创建Jupyter环境
环境创建好后就可以看到vscode的界面
点击TERMINAL并且安装如下依赖:
# 安装transformers
pip install transformers==4.38
pip install sentencepiece==0.1.99
pip install einops==0.8.0
pip install protobuf==5.27.2
pip install accelerate==0.33.0
二、创建hf_download_json.py文件
你可以通过在终端(TERMINAL)中输入如下命令来创建文件,也可以点击vscode的新增文件按钮来创建。
touch hf_download_json.py
粘贴如下代码:
import os
from huggingface_hub import hf_hub_download
# 指定模型标识符
repo_id = "internlm/internlm2_5-7b"
# 指定要下载的文件列表
files_to_download = [
{"filename": "config.json"},
{"filename": "model.safetensors.index.json"}
]
# 创建一个目录来存放下载的文件
local_dir = f"{repo_id.split('/')[1]}"
os.makedirs(local_dir, exist_ok=True)
# 遍历文件列表并下载每个文件
for file_info in files_to_download:
file_path = hf_hub_download(
repo_id=repo_id,
filename=file_info["filename"],
local_dir=local_dir
)
print(f"{file_info['filename']} file downloaded to: {file_path}")
三、运行hf_download_json.py并查看结果
在终端中执行:
python hf_download_json.py
可以看到这个脚本帮我们下载了config.json和model.safetensors.index.json两个文件到当前目录的internlm2_5-7b的文件夹中了。至此闯关任务已经通过啦。
四、下载完整模型并运行
跟创建hf_download_json.py一样创建一个hf_download_demo.py
touch hf_download_demo.py
粘贴如下代码:
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("internlm/internlm2_5-1_8b", trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained("internlm/internlm2_5-1_8b", torch_dtype=torch.float16, trust_remote_code=True)
model = model.eval()
inputs = tokenizer(["A beautiful flower"], return_tensors="pt")
gen_kwargs = {
"max_length": 128,
"top_p": 0.8,
"temperature": 0.8,
"do_sample": True,
"repetition_penalty": 1.0
}
output = model.generate(**inputs, **gen_kwargs)
output = tokenizer.decode(output[0].tolist(), skip_special_tokens=True)
print(output)
运行hf_download_demo.py下载模型并且运行:
python hf_download_demo.py
等待模型下载完成与运行就可以看到运行结果:
PS:由于github codespaces没有gpu,运行大模型可能需要比较长的时间才能出结果。