书生大模型实训营第4期—入门岛第4关:玩转HF/魔搭/魔乐社区
任务一:模型下载
1. 使用Hugging Face平台下载模型
1.1 Hugging Face平台
Hugging Face 是一个开源人工智能平台,主要提供自然语言处理相关的模型、工具和社区资源。它最初专注于开发聊天机器人服务,但真正推动其走向主流的是Transformers
库的开源。这个库可以简化使用复杂深度学习模型的过程(尤其是在NLP任务中),它的开源在机器学习领域引起了巨大轰动。如今,Hugging Face已经发展成为一个拥有超过100,000个预训练模型和10,000个数据集的平台,被誉为机器学习界的GitHub。
在正式使用之前,我们再简单介绍一下HF的Transformers库,作为HF最核心的项目,它可以:
- 直接使用预训练模型进行推理
- 提供大量预训练模型供用户使用
- 使用预训练模型进行迁移学习
正式使用前我们需要去 Hugging Face官网 注册一个账号(需要魔法上网)
1.2 InternLM模型下载
以internlm2_5-1_8b
举例,查看Hugging Face上该模型的地址:
https://huggingface.co/internlm/internlm2_5-1_8b
1.3 GitHub CodeSpace的使用
GitHub Codespaces
是 GitHub 提供基于 Visual Studio Code的云端开发环境,允许开发者在云端创建和运行完整的开发环境,它为开发者提供了一个一致、高效且可扩展的云端开发解决方案,使开发工作更轻量便捷。
任务文档中说因为磁盘有限(10%的A100配置只有24G的内存),不建议我们在 InternStudio 上下载模型,需要使用 GitHub CodeSpace 代替(不过这东西可用的空间也只有32G,感觉没什么区别说实话)。进入CodeSpace
后需要在终端中安装以下依赖方便我们后续模型的运行。
# 安装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
1.3.1 下载internlm2_5-7b-chat的配置文件
因为个人GitHub CodeSpace硬盘空间有限(32GB可用),而7B的模型相对较大,所以我们只下载部分文件作为演示即可。这里我为了文件找起来方便,在当前目录下新建了个blog_demo4
文件夹存放后续实验的代码和相关文件。
我们先新建一个 hf_download_josn.py
文件用于下载模型配置文件:
touch hf_download_josn.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_josn.py
所在文件目录下执行该文件(cd
命令用来切换目录):
python hf_download_josn.py
执行完后在左侧资源管理器可以看到当前文件夹下出现了模型的配置文件(internlm2_5-7b目录下的 config.json
和 model.safetensors.index.json
)
1.3.2 下载internlm2_5-chat-1_8b并打印示例输出
如果我们想要下载一个完整的模型文件并运行它,先创建一个py文件:
touch hf_download_1_8_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)
在该文件所属目录下执行该文件:
python hf_download_1_8_demo.py
等待几分钟后(CodeSpace平台没有GPU,因此我们的代码只能使用CPU进行推理,会比较慢),就能在控制台看到模型返回的结果:
这里以"A beautiful flower"
开头,让模型对其进行续写,它最终返回了一个数学问题,这是因为InternLM的模型数学方面的能力比较强大,因此模型输出会偏向数学领域。
2. 使用魔搭社区平台下载模型
ModelScope 是一个“模型即服务”(MaaS)平台,由阿里巴巴集团的达摩院推出和维护。它旨在汇集来自AI社区的最先进的机器学习模型,并简化在实际应用中使用AI模型的流程。通过ModelScope,用户可以轻松地探索、推理、微调和部署各种AI模型。
先注册登录ModelScope平台,进入导航栏搜索 internlm2_5-chat-1_8b
,由上海人工智能实验室发布的那个模型就是我们要下载的1.8b模型。我们这里使用Intern开发机进行模型下载,自行创建一个即可。
2.1 环境配置
执行下面命令下载依赖(文档中多了条激活预设环境的命令,这条命令要不要无所谓,不影响依赖的安装,我这里直接在base环境下运行的):
# 安装 modelscope
pip install modelscope -t /root/env/maas
pip install numpy==1.26.0 -t /root/env/maas
pip install packaging -t /root/env/maas
注意:为了保证能够找到我们每次装的依赖,每次新建一个终端之后都需要导出path,如果不改变终端,导出一次就够了。
export PATH=$PATH:/root/env/maas/bin
export PYTHONPATH=/root/env/maas:$PYTHONPATH
接着我们创建一个ms_demo
目录用于后面的实验:
mkdir -p /root/ms_demo
2.2 下载指定的多个文件
考虑到7B的模型文件比较大,这里我们采用modelscope的cli工具来下载指定文件,在命令行输入以下命令:
modelscope download \
--model 'Shanghai_AI_Laboratory/internlm2_5-7b-chat' \
tokenizer.json config.json model.safetensors.index.json \
--local_dir '/root/ms_demo'
如果你网络不是很好,可以使用下面命令下载较小的1.8b模型:
modelscope download \
--model 'Shanghai_AI_Laboratory/internlm2_5-1_8b-chat' \
tokenizer.json config.json model.safetensors.index.json \
--local_dir '/root/ms_demo'
刷新一下文件目录,就能看到在ms_demo中下载了指定的json文件:
3. 使用魔乐社区平台下载模型
魔乐社区(Modelers)是一个提供多样化、开源模型的平台,旨在促进开发者和研究人员在最先进的模型和流行应用上进行协作。它的使用方式跟魔搭很像。
这里我们继续使用我们刚刚创建的InterStudio开发机进行模型下载,执行下面命令创建新的文件夹存储下面的实验:
mkdir ml_demo
cd ml_demo
注意,这里手册上的代码我觉得有点问题,它的文件夹是在root文件父目录同级处创建的,这样做一方面会导致你下载模型后可能找不到模型文件,因为这个文件在root目录的上级目录。而且开发机关闭后这个文件会被删掉,所以尽量还是把我们的文件放在root目录下。这里我是在root目录下创建的ml_demo文件夹。
然后我们执行下面命令下载模型:
# 确保安装git-lfs 保证大文件的正常下载
apt-get install git-lfs
git lfs install
# clone 仓库
git clone https://modelers.cn/Intern/internlm2_5-1_8b-chat.git
刷新一下文件夹,即可在ml_demo中找到下载好的模型文件:
任务二:模型上传
2.1 上传模型到Hugging Face
huggingface-cli 是 Hugging Face 官方提供的命令行工具,它允许用户直接从终端下载模型、数据集等资源,还可以进行登录、上传模型和数据等操作。
通过CLI
上传 Hugging Face同样是跟Git相关联,通常大模型的模型文件都比较大,因此我们需要安装git lfs
以支持大文件系统。安装命令如下:
curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash
# sudo apt-get install git-lfs # CodeSpace里面可能会有aptkey冲突且没有足够权限
git lfs install # 直接在git环境下配置git LFS
pip install huggingface_hub
然后我们使用huggingface-cli login
命令进行登录,登录过程中需要输入用户的Access Tokens
,我们进入个人设置页面,找到Access Token
,点击create new token
,创建一个类型为Write
的token。
注意,token创建完毕后记得复制下来保存,关闭这个弹窗后token就不可见了
接着在CodeSpace中运行下面的命令进行登录:
git config --global credential.helper store
huggingface-cli login
登录时需要输入刚刚的Access Token,复制token后右键
粘贴即可。(这里token是不可见的,粘贴完后回车然后输入Y
即可完成登录)
这里我们创建一个新的模型库并将其拉到本地:
#intern_study_L0_4就是model_name
huggingface-cli repo create intern_study_L0_4
# 克隆到本地 your_hugging_face_name 注意替换成你自己的
git clone https://huggingface.co/{your_hugging_face_name}/intern_study_L0_4
这里文档中给的代码是错的,huggingface-cli repo create intern_study_L0_4
这行命令的作用是在你的Hugging Face上创建一个新的模型库,所以后面git clone的时候用的应该是你的Hugging Face name。
克隆好之后,刷新文件目录可以看到克隆好的intern_study_L0_4文件夹。
执行完上面代码后在我们HF的个人模型库中可以看到一个空的新建库:
我们可以把训练好的模型保存进里面,这里考虑到网速问题,只上传我们刚刚下载好的config.json,把它复制粘贴进intern_study_L0_4
文件夹里,还可以写一个README文件,比如可以粘贴以下内容:
# 书生浦语大模型实战营camp4
- hugging face模型上传测试
- 更多内容请访问 https://github.com/InternLM/Tutorial/tree/camp4
然后使用下面命令进行提交:
cd intern_study_L0_4
git add .
git commit -m "add:intern_study_L0_4"
git push
这里git push
可能会报错,如果报错的话执行下面命令再重新push即可。
# <repo_path>的形式为:<user_name>/intern_study_L0_4
git remote set-url origin https://<user_name>:<token>@huggingface.co/<repo_path>
git pull origin
执行完上面这些步骤后就可以在Hugging Face的个人profile里看到这个model,也可以直接将下面的Url输入到浏览器网址栏上查看:
https://huggingface.co/<user_name>/intern_study_L0_4
2.2 上传模型到魔搭平台
魔搭社区类似HF,也有一套创建模型的界面。
上传文件可以直接通过平台添加文件,也可以通过git下载模型后进行修改和上传文件。我们先创建一个自己的模型,然后把它克隆到本地。在我们创建的模型界面中有模型下载的相关命令:
我们这里使用Git方式下载,还是使用上一节模型下载中的开发机,在开发机中执行上面的Git指令,将项目先克隆到本地。刷新下目录就能看到克隆的项目:
然后我们就可以在这个文件夹内增加或者修改文件内容,这里我们上传了一些第一节中下载的权重文件和一张图片(用来渲染项目主页),并修改了README文件的一些内容。然后使用下面命令提交并上传我们的修改即可:
cd intern_study_L0_4
git add .
git commit -m "add:intern_study_L0_4"
git push
这里push的时候可能会报错,提示你没有配置git信息,我们运行下面命令配置一下即可:
git config --global user.name "Your Name"
git config --global user.email "[email protected]"
然后这里push的时候还需要你输入用户名和密码,注意:这里的密码不是你魔搭的登录密码,而是你的Git访问令牌,跟Hugging Face中的Access Token一样,使用方法跟HF一致。去个人界面找到访问令牌
之后创建一个写类型的token然后复制保存下来,用户密码填这个才能成功push。
上传完后在个人模型中就能看到修改后的项目:
2.3 上传模型到魔乐平台
魔乐的操作跟魔搭基本一样,同样是这几个步骤:
- 创建模型库
- 克隆到本地开发机上
- 将自己想要上传或修改的文件放进克隆的文件夹内
- 提交修改并push到远程仓库
魔乐的新建项目中也有下载模型的命令,按照教程一步步走即可:
clone
时要是遇到有关 git lfs
的报错,运行下面命令也许可以解决你的问题:
# 确保安装git-lfs 保证大文件的正常下载
apt-get install git-lfs
git lfs install
上传模型的具体操作流程这里就不赘述了,大家可以参照上面魔搭的教程。
任务三:HF Space上传部署intern_cobuild
Hugging Face Spaces 是一个允许我们轻松地托管、分享和发现基于机器学习模型的应用的平台。Spaces 使得开发者可以快速将我们的模型部署为可交互的 web 应用,且无需担心后端基础设施或部署的复杂性。
3.1 Hugging Face Spaces的使用
首先访问以下链接,进入Spaces,点击右上角的Create new Space
进行Space创建:
https://huggingface.co/spaces
在创建页面中,输入项目名为intern_cobuild
,并选择Static
应用进行创建
HF Space提供GPU租用服务,创建Static应用默认选择免费的CPU配置,但是选其他SDK的话可以选不同配置的GPU:
创建成功后会自动跳转到一个默认的HTML页面。我们回到我们的CodeSpace,运行下面的命令接着clone项目。
# 请将<your_username>替换你自己的username
git clone https://huggingface.co/spaces/<your_username>/intern_cobuild
cd intern_cobuild
找到 intern_cobuild
文件夹下的index.html
文件,修改html代码如下:
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width" />
<title>My static Space</title>
<style>
html, body {
margin: 0;
padding: 0;
height: 100%;
}
body {
display: flex;
justify-content: center;
align-items: center;
}
iframe {
width: 430px;
height: 932px;
border: none;
}
</style>
</head>
<body>
<iframe src="https://colearn.intern-ai.org.cn/cobuild" title="description"></iframe>
</body>
</html>
保存后我们运行下面的命令将其push到远程仓库上:
git add .
git commit -m "update: colearn page"
git push
在push的时候如果报错:remote: Password authentication in git is no longer supported. You must use a user access token or an SSH key instead.
,执行下面这条命令再push一次即可:
# <repo_path>的形式为:<user_name>/intern_cobuild
git remote set-url origin https://<user_name>:<token>@huggingface.co/<repo_path>
Access Token的获取在模型上传部分已经介绍了。
再次进入Space界面,可以看到实战营的共建活动页面说明我们部署成功了:
至此,书生大模型实训营第4期入门岛第4关:玩转HF/魔搭/魔乐社区任务完成~