Hugging Face 简介
Hugging Face 是 AI/ML 领域最大的开源社区和模型平台。它提供了数十万个预训练模型、数据集,以及强大的 Transformers 库,是现代 AI 开发的基础设施。
为什么使用 Hugging Face?
1. 最大的模型库
超过 50 万个模型:
- LLM:Llama、Mistral、Qwen
- Embedding:BGE、E5、Instructor
- 图像:Stable Diffusion、CLIP
- 音频:Whisper、Bark
2. 开源生态
完整的工具链:
- Transformers:模型使用
- Datasets:数据集管理
- Accelerate:分布式训练
- PEFT:参数高效微调
- Hub:模型托管
3. 免费使用
| 服务 | 免费额度 |
|---|---|
| 模型下载 | 无限 |
| Inference API | 有限免费 |
| Spaces | 免费托管 |
| 私有模型 | 需付费 |
核心组件
Transformers 库
使用预训练模型的标准方式:
from transformers import pipeline
# 文本生成
generator = pipeline("text-generation", model="gpt2")
result = generator("AI 技术正在", max_length=50)
print(result[0]["generated_text"])
# 文本分类
classifier = pipeline("sentiment-analysis")
result = classifier("这个产品太棒了!")
print(result) # [{'label': 'POSITIVE', 'score': 0.99}]
# 问答
qa = pipeline("question-answering")
result = qa(question="什么是 Python?", context="Python 是一种编程语言...")
Embedding 模型
生成文本向量:
from sentence_transformers import SentenceTransformer
# 加载模型
model = SentenceTransformer("BAAI/bge-small-zh-v1.5")
# 生成向量
sentences = ["这是第一个句子", "这是第二个句子"]
embeddings = model.encode(sentences)
print(embeddings.shape) # (2, 512)
模型 Hub
下载和上传模型:
from huggingface_hub import HfApi, snapshot_download
# 下载模型
model_path = snapshot_download(repo_id="BAAI/bge-small-zh-v1.5")
# 上传模型
api = HfApi()
api.upload_folder(
folder_path="./my_model",
repo_id="username/my-model",
repo_type="model"
)
快速开始
安装
pip install transformers
pip install sentence-transformers # Embedding 模型
pip install huggingface_hub # Hub 操作
pip install accelerate # GPU 加速
基础使用
from transformers import AutoTokenizer, AutoModel
import torch
# 1. 加载模型和分词器
model_name = "BAAI/bge-small-zh-v1.5"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModel.from_pretrained(model_name)
# 2. 编码文本
text = "Hugging Face 是一个 AI 开源社区"
inputs = tokenizer(text, return_tensors="pt", padding=True)
# 3. 获取向量
with torch.no_grad():
outputs = model(**inputs)
embeddings = outputs.last_hidden_state.mean(dim=1)
print(embeddings.shape) # torch.Size([1, 512])
常用 Embedding 模型
中文模型
| 模型 | 维度 | 特点 |
|---|---|---|
| BAAI/bge-small-zh-v1.5 | 512 | 轻量快速 |
| BAAI/bge-base-zh-v1.5 | 768 | 平衡选择 |
| BAAI/bge-large-zh-v1.5 | 1024 | 高精度 |
多语言模型
| 模型 | 维度 | 特点 |
|---|---|---|
| sentence-transformers/all-MiniLM-L6-v2 | 384 | 轻量英文 |
| intfloat/multilingual-e5-small | 384 | 多语言 |
| BAAI/bge-m3 | 1024 | 多语言最强 |
使用示例
from sentence_transformers import SentenceTransformer
# 中文场景推荐
model = SentenceTransformer("BAAI/bge-small-zh-v1.5")
# 多语言场景
model = SentenceTransformer("BAAI/bge-m3")
# 快速英文场景
model = SentenceTransformer("all-MiniLM-L6-v2")
Inference API
在线调用模型:
import requests
API_URL = "https://api-inference.huggingface.co/models/gpt2"
headers = {"Authorization": f"Bearer {HF_TOKEN}"}
def query(payload):
response = requests.post(API_URL, headers=headers, json=payload)
return response.json()
output = query({"inputs": "The future of AI is"})
print(output)
免费 Embedding API
import requests
API_URL = "https://api-inference.huggingface.co/pipeline/feature-extraction/BAAI/bge-small-zh-v1.5"
headers = {"Authorization": f"Bearer {HF_TOKEN}"}
def get_embedding(text):
response = requests.post(API_URL, headers=headers, json={"inputs": text})
return response.json()
embedding = get_embedding("你好世界")
与 LangChain 集成
from langchain_huggingface import HuggingFaceEmbeddings
from langchain_community.vectorstores import FAISS
# 使用 HuggingFace Embedding
embeddings = HuggingFaceEmbeddings(
model_name="BAAI/bge-small-zh-v1.5"
)
# 创建向量存储
vectorstore = FAISS.from_texts(
texts=["文档1", "文档2"],
embedding=embeddings
)
# 相似性搜索
docs = vectorstore.similarity_search("查询", k=3)
与 LlamaIndex 集成
from llama_index.embeddings.huggingface import HuggingFaceEmbedding
from llama_index.core import Settings, VectorStoreIndex, SimpleDirectoryReader
# 设置 Embedding 模型
Settings.embed_model = HuggingFaceEmbedding(
model_name="BAAI/bge-small-zh-v1.5"
)
# 加载文档并创建索引
documents = SimpleDirectoryReader("./data").load_data()
index = VectorStoreIndex.from_documents(documents)
# 查询
query_engine = index.as_query_engine()
response = query_engine.query("问题")
Spaces:托管 AI 应用
Gradio 应用
import gradio as gr
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("BAAI/bge-small-zh-v1.5")
def get_embedding(text):
embedding = model.encode(text)
return str(embedding[:10]) + "..."
demo = gr.Interface(
fn=get_embedding,
inputs="text",
outputs="text",
title="文本向量生成器"
)
demo.launch()
部署到 Spaces
- 创建
requirements.txt - 创建
app.py(Gradio 或 Streamlit) - 推送到 Hugging Face Space
本地运行 LLM
使用 Transformers
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
# 加载模型
model_name = "Qwen/Qwen2-0.5B"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
model_name,
torch_dtype=torch.float16,
device_map="auto"
)
# 生成文本
inputs = tokenizer("Python 是", return_tensors="pt")
outputs = model.generate(**inputs, max_new_tokens=50)
print(tokenizer.decode(outputs[0]))
使用 Text Generation Inference (TGI)
# Docker 部署
docker run --gpus all -p 8080:80 \
ghcr.io/huggingface/text-generation-inference:latest \
--model-id mistralai/Mistral-7B-v0.1
模型微调
使用 PEFT (LoRA)
from peft import LoraConfig, get_peft_model
from transformers import AutoModelForCausalLM
# 加载基础模型
model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-2-7b-hf")
# 配置 LoRA
lora_config = LoraConfig(
r=8,
lora_alpha=32,
target_modules=["q_proj", "v_proj"],
lora_dropout=0.1
)
# 应用 LoRA
model = get_peft_model(model, lora_config)
print(f"可训练参数: {model.print_trainable_parameters()}")
定价
| 服务 | 价格 |
|---|---|
| 公开模型 | 免费 |
| Inference API (免费) | 有限调用 |
| Inference Endpoints | $0.06/小时起 |
| PRO 订阅 | $9/月 |
| Enterprise Hub | 联系销售 |
最佳实践
1. 选择合适的模型
# 场景 1:快速原型(小模型)
model = SentenceTransformer("all-MiniLM-L6-v2") # 384 维
# 场景 2:中文生产环境
model = SentenceTransformer("BAAI/bge-base-zh-v1.5") # 768 维
# 场景 3:多语言场景
model = SentenceTransformer("BAAI/bge-m3") # 1024 维
2. 缓存模型
import os
# 设置缓存目录
os.environ["HF_HOME"] = "/path/to/cache"
os.environ["TRANSFORMERS_CACHE"] = "/path/to/cache"
# 模型会自动缓存到该目录
3. 离线使用
# 先下载模型
from huggingface_hub import snapshot_download
snapshot_download("BAAI/bge-small-zh-v1.5", local_dir="./models/bge")
# 离线加载
model = SentenceTransformer("./models/bge")
下一步
- Model Hub 指南 - 了解模型托管与协作平台
- Transformers 库 - 核心库使用与代码示例
- Inference API - 在线调用与部署模型
提示:Hugging Face 是 AI 开发的基础设施,掌握它可以让你快速使用各种开源模型。