ModelScope vs Hugging Face:中文开发者该如何选择?附API实战对比
1. 概述
提起大模型平台,不得不提的便是 ModelScope 和 Hugging Face 平台,它们都属于人工智能模型开源社区及创新平台。本文将简单介绍这两个平台的特点及常用 API,帮助您更好地了解和使用大模型。
- ModelScope:由阿里巴巴通义实验室联合CCF开源发展委员会于2022年6月创立。该平台提供模型库、数据集和创空间等功能,涵盖计算机视觉、自然语言处理、语音、多模态等多个领域的任务,与清华、北大、浙大等20多所中国顶级高校展开学术合作,打造以MaaS为核心的AI开发新范式,其社区文化是“共享·共创·共进,构建持续创新的AI开源生态”。
- Hugging Face:是2016年成立的开源人工智能创业公司,专注于NLP技术。其提供一系列预训练的AI模型,构建了包括自然语言处理库、模型库、数据集等在内的完整开源产品矩阵,建立了包含开发者社区等的AI开发生态,还围绕NLP、Vision等方向为客户提供定制化解决方案以获取技术服务费用。
2. 平台对比
| 特性 | ModelScope(魔搭) | Hugging Face |
|---|---|---|
| 开发方 | 阿里巴巴 | Hugging Face Inc. |
| 主要定位 | 中文场景优化,阿里生态集成 | 全球领先的开源模型社区 |
| 模型侧重 | 中文大模型、多模态、行业模型 | 全品类模型(NLP/CV/语音等) |
| 数据集 | 中文数据集丰富 | 全球最大开源数据集库之一 |
| 部署方式 | 支持阿里云一键部署 | 本地/云灵活部署 |
| 开源协议 | 部分模型商用需授权 | 多数模型完全开源(Apache/MIT) |
3. 常用API示例
3.1 ModelScope
安装与初始化
1
pip install modelscope模型下载
1
2
3
4from modelscope import snapshot_download, AutoModel, AutoTokenizer
# 下载模型(阿里云镜像加速)local_dir可指定下载路径,cache_dir指定缓存路径
model_dir = snapshot_download('qwen/Qwen-1_8B-Chat')调用对话模型
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19from modelscope import AutoModelForCausalLM
from transformers import AutoTokenizer
model_path = "your/model/path"
model = AutoModelForCausalLM.from_pretrained(model_path, device_map='auto')
tokenizer = AutoTokenizer.from_pretrained(
model_path,
trust_remote_code=True
)
response = model.chat(
tokenizer=tokenizer, # 新增必要参数
query="你好",
history=[],
system="你是一个有帮助的AI助手" # 可选系统提示
)
print(response)数据集下载
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35import json
import os
from modelscope import MsDataset
def write_file(file_path, content, content_type="json", encoding="utf-8"):
with open(file_path, "w", encoding="utf-8") as f:
if content_type == "json":
json.dump(content, f, ensure_ascii=False, indent=2)
name = ""
cache_dir = ""
local_dir = ""
dataset = MsDataset.load(
name,
cache_dir=cache_dir,
trust_remote_code=True,
subset_name="default",
)
if isinstance(dataset, dict): # 多分片数据集
for split, split_dataset in dataset.items():
split_file = os.path.join(local_dir, f"{split}.json")
split_data = [example for example in split_dataset]
write_file(split_file, split_data, content_type="json")
print(
f"保存数据集[{name}] 分片[{split}]数据到文件:{split_file}]"
)
else: # 单分片数据集
data = [example for example in dataset]
data_file = os.path.join(local_dir, "dataset.json")
write_file(data_file, data, content_type="json")
print(
f"保存数据集[{name}] 数据到文件:{data_file}"
)
3.2 Hugging Face
安装与初始化
1
pip install transformers datasets模型下载
1
2
3
4
5from huggingface_hub import snapshot_download
snapshot_download(
repo_id=name, local_dir=local_dir, cache_dir=cache_dir
)调用文本模型
1
2
3
4
5
6
7
8from transformers import AutoModelForCausalLM, AutoTokenizer
model = AutoModelForCausalLM.from_pretrained('meta-llama/Llama-2-7b-chat-hf')
tokenizer = AutoTokenizer.from_pretrained('meta-llama/Llama-2-7b-chat-hf')
inputs = tokenizer("Hello!", return_tensors="pt")
outputs = model.generate(**inputs)
print(tokenizer.decode(outputs[0]))使用推理API(无需本地部署)
1
2
3
4
5
6
7
8
9
10
11import requests
API_URL = "https://api-inference.huggingface.co/models/gpt2"
headers = {"Authorization": "Bearer YOUR_TOKEN"}
def query(payload):
response = requests.post(API_URL, headers=headers, json=payload)
return response.json()
output = query({"inputs": "Explain AI in simple terms"})
print(output)数据集下载
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29import json
import os
from datasets import load_dataset
def write_file(file_path, content, content_type="json", encoding="utf-8"):
with open(file_path, "w", encoding="utf-8") as f:
if content_type == "json":
json.dump(content, f, ensure_ascii=False, indent=2)
name = ""
cache_dir = ""
local_dir = ""
dataset = load_dataset(
name, cache_dir=cache_dir, trust_remote_code=True
)
# 多分片数据集
for split, data in dataset.items():
split_file = os.path.join(local_dir, f"{split}.json")
write_file(split_file, data.to_list(), content_type="json")
print(
f"数据集[{name}][{split}] 本地保存目录: {split_file}"
)
print(
f"数据集[{name}] 下载完成!缓存目录:{cache_dir}"
)数据集加载
1
2
3
4from datasets import load_dataset
dataset = load_dataset('imdb', split='train[:10]')
print(dataset[0])
ModelScope vs Hugging Face:中文开发者该如何选择?附API实战对比
https://blog.echo-silence.top/posts/31d657e2.html