利用Colab与阿里云盘实现HuggingFace模型高效转存至ModelScope

📅 发布时间:2026/7/7 13:54:04 👁️ 浏览次数:
利用Colab与阿里云盘实现HuggingFace模型高效转存至ModelScope
1. 为什么你需要这个“曲线救国”的方案如果你在国内玩过AI模型大概率对HuggingFace又爱又恨。爱的是它像个模型界的“应用商店”几乎什么都有恨的是那个下载速度动不动就几KB/s一个几GB的模型能下到天荒地老。而ModelScope魔搭作为国内优秀的模型社区访问速度飞快体验丝滑但有时候你心仪的模型它上面还没有。这时候一个很自然的需求就产生了能不能把HuggingFace上那个“慢吞吞”的模型搬到ModelScope上来以后用起来就方便了当然可以而且方法不止一种。但今天我要分享的是我自己实践下来最稳定、成本最低、也最适合个人开发者和小团队的一套组合拳Google Colab 阿里云盘。这个方案的思路非常清晰就像一个接力赛第一棒Colab。利用它免费的GPU和高速的国际网络从HuggingFace“嗖”地一下把模型拉下来。第二棒阿里云盘。把Colab下载好的模型上传到你的阿里云盘作为一个安全、免费的中转站。第三棒ModelScope Notebook。在魔搭平台打开一个Notebook从你的阿里云盘把模型下载到本地然后一键上传到你的ModelScope仓库。整个过程你几乎不需要为网络和存储付费Colab和阿里云盘都有免费额度操作也都在浏览器里完成不需要折腾自己的服务器或代理。下面我就带你一步步跑完这个接力赛我会把每个环节的细节、可能遇到的“坑”以及我的解决方案都告诉你。2. 第一棒在Colab上高速下载HuggingFace模型Google Colab是个好东西尤其对于没有高性能显卡的朋友。它不仅能免费跑代码更重要的是它的服务器通常在国际网络环境下访问HuggingFace的速度比我们直接访问快得多。2.1 启动Colab并安装核心工具首先打开 Google Colab新建一个笔记本。我建议选择“运行时” - “更改运行时类型”将硬件加速器设置为T4 GPU。虽然我们主要任务是下载和上传但有个GPU备用万一想简单测试下模型也方便。接下来就是安装我们需要的两个Python包。在第一个代码单元格里运行!pip install huggingface_hub aligo -qhuggingface_hub这是HuggingFace官方库用来和他们的模型仓库交互下载模型就靠它。aligo这是一个非官方的阿里云盘Python SDK功能强大我们用它来登录云盘和上传文件。-q参数是为了让安装过程安静些少输出点日志。安装过程很快通常十几秒就搞定了。2.2 选择合适的模型并下载安装好工具我们就可以“瞄准”目标模型了。这里我以TencentBAC/Conan-embedding-v1这个文本嵌入模型为例你可以替换成任何你想要的模型ID。import huggingface_hub as hh # 1. 指定你想下载的模型仓库 repo_id TencentBAC/Conan-embedding-v1 # 2. 可选列出仓库的所有分支和标签确保我们下载的是最新版或指定版本 revision_list hh.list_repo_refs(repo_id) print(可用的分支和标签, revision_list) # 通常我们下载主分支的最新提交 ref revision_list.branches[0].ref # 获取主分支引用 print(f将下载分支: {ref}) # 3. 开始下载这是最关键的一步。 # local_dir 指定模型下载到Colab虚拟机的哪个目录 hh.snapshot_download( repo_idrepo_id, revisionref, local_dir./download, # 模型会下载到当前目录下的download文件夹 local_dir_use_symlinksFalse # 建议设置为False直接下载文件而非符号链接避免后续上传问题 )运行这段代码你会看到下载进度条。得益于Colab的网络环境速度通常能达到几MB/s甚至更高一个几GB的模型几分钟到十几分钟就能搞定。下载完成后所有模型文件包括pytorch_model.bin,config.json,tokenizer.json等都会整齐地存放在./download目录下。这里有个重要提示snapshot_download函数非常智能它会下载构成这个模型快照的所有必要文件并且自动处理大文件的LFS大文件存储问题。你不需要自己再去纠结哪些是LFS文件它会帮你一并处理好。3. 第二棒用阿里云盘做免费高速中转站模型已经躺在Colab的临时磁盘里了但Colab的运行时是有生命周期的通常空闲一段时间后就会断开我们必须把它转移到更持久的地方。直接上传到ModelScope不行我们还需要在ModelScope的环境里做最后的上传操作。所以阿里云盘成了完美的“中转仓库”。3.1 在Colab中登录阿里云盘我们需要用aligo库来登录。它支持扫码登录非常方便。在Colab的新单元格中运行from aligo import Aligo # 这会触发登录流程。第一次运行会在输出中显示一个二维码链接。 # 点击那个链接用你的阿里云盘APP扫码确认登录即可。 ali Aligo() # 登录成功后可以打印一下用户信息确认一下 user ali.get_user() print(f当前登录用户: {user.nick_name} ({user.user_name}))执行后你会看到一个输出里面包含一个网址。点击它会打开一个二维码页面。用你的手机阿里云盘APP扫描这个二维码并在手机上点击确认登录。成功后Colab中的代码就会继续执行并打印出你的昵称。这意味着你的Colab笔记本现在已经获得了操作你云盘的权限仅限于本次运行时。3.2 将模型上传至云盘指定文件夹登录成功后我们就可以上传刚才下载的模型目录了。# 本地模型所在的目录路径 local_model_path /content/download # 在阿里云盘上准备一个文件夹来存放它。 # get_folder_by_path 会查找指定路径的文件夹如果没找到create_folderTrue 参数会创建它。 remote_folder ali.get_folder_by_path(Colab_Models, create_folderTrue) print(f模型将上传到云盘文件夹: {remote_folder.name} (ID: {remote_folder.file_id})) # 开始上传整个文件夹 upload_result ali.upload_folder(local_folderlocal_model_path, parent_file_idremote_folder.file_id) print(文件夹上传任务已提交)upload_folder方法会自动递归上传download目录下的所有文件和子目录。上传速度取决于Colab的上行带宽和阿里云盘的接收速度通常也很快。你可以在阿里云盘APP或网页端刷新一下看到Colab_Models文件夹下出现了download文件夹里面就是完整的模型文件这说明第二棒已经顺利交接。4. 第三棒在ModelScope上完成最终转存现在模型已经安全地躺在你的阿里云盘里了。接下来我们切换到ModelScope的环境把模型“接”过来并正式发布到ModelScope社区。4.1 启动ModelScope Notebook并安装工具登录 ModelScope进入“我的空间” - “Notebook”。创建一个新的Notebook选择GPU环境会更高效。在Notebook的第一个单元格同样需要安装阿里云盘的客户端因为我们要从这里下载模型。!pip install aligo -q4.2 从阿里云盘下载模型到Notebook和在Colab里一样我们需要先登录阿里云盘。from aligo import Aligo # 再次扫码登录。注意这次登录和Colab那次是独立的。 ali Aligo()登录成功后找到我们刚刚上传的文件夹并下载到Notebook的本地目录。# 定位云盘上的模型文件夹 # 注意路径我们之前上传到了 Colab_Models/download remote_model_folder ali.get_folder_by_path(Colab_Models/download) if remote_model_folder is None: print(错误在云盘上未找到模型文件夹请检查路径) else: # 下载到Notebook的 /tmp 目录或其他你有写入权限的目录 local_target_path /tmp/download_from_cloud print(f开始从云盘下载模型到: {local_target_path}) ali.download_folder(folder_file_idremote_model_folder.file_id, local_folderlocal_target_path) print(模型下载完成)这样HuggingFace的模型就经由Colab、阿里云盘完整地迁移到了ModelScope的Notebook环境中。4.3 准备模型配置文件并上传这是最关键也最容易出错的一步。ModelScope对模型的上传有一定的结构要求直接上传从HuggingFace下载的文件夹可能会失败主要是因为缺少ModelScope能识别的配置文件。第一步创建必需的配置文件ModelScope需要一个configuration.json文件来了解模型的基本信息。而HuggingFace的模型通常只有一个config.json。我们需要创建一个configuration.json其内容可以直接从config.json复制并调整。首先我们检查一下下载的文件夹里有什么并创建初始的配置文件# 查看下载的模型文件结构 !ls -la /tmp/download_from_cloud/ # 为ModelScope创建一个空的 configuration.json 文件 !touch /tmp/download_from_cloud/configuration.json第二步编辑 configuration.json现在我们需要用代码来生成或编辑这个文件。核心思想是将HuggingFace的config.json内容作为configuration.json中model字段的值并补充ModelScope需要的顶层字段。我们来写一个Python脚本来完成这个转换import json import os model_dir /tmp/download_from_cloud config_path os.path.join(model_dir, config.json) configuration_path os.path.join(model_dir, configuration.json) # 1. 读取HuggingFace的config.json with open(config_path, r, encodingutf-8) as f: hf_config json.load(f) # 2. 构建ModelScope所需的configuration.json结构 # 这是框架信息根据你的模型来定通常是 pytorch, tensorflow, mindspore 等 framework pytorch # 这是任务类型至关重要决定了模型在魔搭上被归为何种用途。必须从ModelScope支持的任务列表中选择。 # 例如text-classification, token-classification, fill-mask, sentence-embedding, text-generation 等。 # 你需要根据你的模型功能来填写。例如我们的例子是嵌入模型所以用 sentence-embedding。 task sentence-embedding ms_configuration { framework: framework, task: task, model: hf_config # 把HuggingFace的整个配置搬过来 } # 3. 写入新的configuration.json文件 with open(configuration_path, w, encodingutf-8) as f: json.dump(ms_configuration, f, indent2, ensure_asciiFalse) print(configuration.json 文件已生成) print(内容预览) print(json.dumps(ms_configuration, indent2, ensure_asciiFalse)[:500] ...)注意task字段一定要填对你可以去ModelScope官网查看其支持的任务列表。填错了模型上传后可能无法被正确的Pipeline调用。第三步获取Token并上传模型现在万事俱备只欠上传。你需要先到ModelScope的个人设置里生成一个Access Token。from modelscope.hub.api import HubApi # 替换成你自己生成的Token YOUR_ACCESS_TOKEN 你的_modelscope_token_在这里 # 指定你要上传到的模型ID。格式是 {你的用户名}/{模型仓库名} # 模型仓库如果不存在会自动创建。 MODEL_ID 你的用户名/你的模型仓库名 # 登录 api HubApi() api.login(YOUR_ACCESS_TOKEN) # 推送模型 # 这会自动将整个文件夹上传并读取其中的 configuration.json 来初始化模型卡片。 push_result api.push_model( model_idMODEL_ID, model_dirmodel_dir # 包含 configuration.json 的目录 ) print(f模型上传成功状态{push_result}) print(f你可以在 https://modelscope.cn/models/{MODEL_ID} 查看你的模型。)运行这段代码你的模型就会开始上传。上传完成后模型会进入审核状态。ModelScope的审核通常很快主要是检查一些基本规范和安全性。审核通过后你的模型就正式在ModelScope上可用了5. 验证与测试确保转存成功模型上传并通过审核后最重要的一步就是验证它是否能正常工作。我们直接在ModelScope的Notebook里测试一下。5.1 安装ModelScope库并导入模型确保你的Notebook安装了最新版的modelscope。!pip install modelscope -q然后使用Pipeline来加载我们刚刚上传的模型。Pipeline是ModelScope的一个强大抽象它把模型加载、预处理、推理、后处理打包成了一个简单的调用接口。from modelscope.pipelines import pipeline from modelscope.utils.constant import Tasks # 使用你上传的模型ID model_id 你的用户名/你的模型仓库名 # 创建任务对应的Pipeline。 # 这里的 Tasks.sentence_embedding 必须和 configuration.json 里的 task 字段一致 pipeline_ins pipeline(taskTasks.sentence_embedding, modelmodel_id, model_revisionmaster) # 默认使用master分支 print(Pipeline加载成功)5.2 运行推理测试现在用一些样例数据来跑一下看看输出是否符合预期。# 根据模型功能构造输入 # 对于句子嵌入模型输入格式可能因模型而异需要参考原HuggingFace模型卡片的示例。 # 这里沿用示例模型的格式。 test_inputs { source_sentence: [机器学习是什么], sentences_to_compare: [ 机器学习是人工智能的一个分支。, 今天天气真好。, 它让计算机能够从数据中学习。 ] } # 进行推理 try: result pipeline_ins(test_inputs) print(推理成功结果如下) # 结果可能包含嵌入向量和相似度分数我们打印出来看看结构 print(f结果类型: {type(result)}) if isinstance(result, dict): for key, value in result.items(): print(f{key}: {str(value)[:100]}...) # 只打印前100字符防止刷屏 else: print(result) except Exception as e: print(f推理过程中出现错误: {e}) # 错误信息能帮你定位问题比如任务类型不匹配、输入格式错误等。如果一切顺利你会看到模型输出了向量或相似度分数。这证明从HuggingFace下载到转存至ModelScope再到最终加载推理整个链路已经完全跑通。以后你和你的团队就可以享受ModelScope高速、稳定的模型下载服务了。6. 避坑指南与进阶技巧走完整个流程你可能会觉得“也就这样嘛”。但实际操作中总会遇到一些意想不到的问题。这里我分享几个我踩过的坑和对应的解决办法。坑1HuggingFace模型下载到一半失败这通常是因为网络波动或Colab运行时重启。huggingface_hub库支持断点续传snapshot_download函数在默认情况下就会尝试续传。如果中断了重新运行下载代码即可它会自动跳过已完成的文件。坑2阿里云盘扫码登录失败有时候Colab显示的二维码链接可能因为网络问题无法访问。aligo库提供了另一种方式使用refresh_token登录。你可以在一个稳定的环境比如你自己的电脑先运行一次扫码登录的代码然后打印出ali.auth.refresh_token并保存下来。以后在Colab或ModelScope Notebook里就可以用这个token直接登录无需再扫码。from aligo import Aligo # 使用保存的refresh_token登录 ali Aligo(refresh_token你保存的refresh_token字符串)坑3ModelScope上传失败提示“配置文件错误”这是最常见的问题。请务必检查configuration.json文件是否确实存在于模型目录的根层级。configuration.json里的task字段是否拼写正确且是ModelScope支持的任务。framework字段是否与模型实际使用的框架一致。整个JSON格式是否正确没有多余的逗号或括号缺失。可以用在线JSON校验工具检查。坑4上传的模型在ModelScope上无法用Pipeline加载加载失败除了上述配置问题还可能是因为模型文件不完整确保所有必要的文件如pytorch_model.bin,config.json,vocab.txt,tokenizer.json等都已上传。比较一下HuggingFace页面列出的文件和你的文件夹。依赖库版本不匹配有些模型需要特定版本的Transformer或PyTorch。你可以在ModelScope的模型卡片页面编辑“运行示例”所需的依赖环境。在Notebook测试时可以尝试手动安装模型所需的特定版本库。进阶技巧自动化脚本如果你经常需要转存模型可以把上述所有步骤写成一个完整的Python脚本。脚本可以接受模型ID、阿里云盘目标路径、ModelScope目标模型ID等作为参数实现一键转存。这样就能极大提升效率把重复劳动交给代码。整个流程跑下来虽然步骤不少但每一步都有明确的目的和工具支持。它完美地利用了Colab的网络优势、阿里云盘的存储中转优势以及ModelScope的生态优势为国内开发者访问全球AI模型资源提供了一个非常实用的解决方案。当你成功把自己需要的第一个模型转存过来之后后面的操作就会变得非常熟练。最重要的是你再也不用对着HuggingFace那令人心碎的低速下载进度条发呆了。