大型语言模型(LLMs)目前非常流行,尝试新的项目和模型也变得很有趣。但要与他人分享你的项目却面临挑战——大多数云平台要么价格高昂,要么配置复杂,甚至兼而有之。
这正是 Hugging Face Spaces 与众不同的地方。Hugging Face 不仅仅是模型和数据集的集散地;它还像其他主流云服务商一样,提供机器学习基础设施。最棒的是?他们提供免费的 CPU 实例,非常适合轻量级的 LLM 应用。这意味着你可以将项目从本地迁移到线上,与全世界分享,而无需花一分钱。Hugging Face Spaces 让你能够用 Streamlit、Gradio 或 Docker 构建的机器学习应用,只需几次点击就能免费部署,几乎无需配置。
在本教程中,我将带你一步步实践,如何用 Streamlit 从零开始,将一个简单的聊天机器人部署到 Hugging Face Spaces,实现上线。
一、将 LLM 部署到 Hugging Face Spaces
前置条件
你需要一个 Hugging Face 账户。如果还没有,请在登录页面注册一个新账户。完成后,你就可以开始了——无需额外设置或云服务。
1. 创建新 Space
前往 Hugging Face 的“创建新 Space”页面。页面上会包含以下信息:
- Space Name(空间名称)
:最终将体现在项目的 URL 和名称中。
- SDK
:选择 Streamlit 作为后端。其他选项还包括 Gradio、Docker 和静态 HTML。
- Space Hardware(硬件资源)
:默认是免费的 CPU 实例,Hugging Face 也提供付费的高配置实例和 GPU 实例。目前我们用基础 CPU 实例即可。
- Visibility(可见性)
:设置项目的可见性,默认公开,任何人都能访问你的 Space 并查看项目。私有实例则仅你本人及所在组织成员(如有)可见。
填写完上述信息后,页面应类似如下示例:
点击“Create Space”后,你会被重定向到新的 Space 页面,该页面包含设置说明和一个空仓库,供你上传代码。
此时,你的新 Space 应该如下所示:
2. 克隆新 Space
Hugging Face Spaces 的运作方式类似 GitHub 仓库;你可以克隆 Space 到本地,进行更改后再推送回去。一旦项目包含必要文件,Hugging Face 会自动检测更改、构建应用并上线。
首先,将 Space 克隆到本地:
你可以在 Space 页面找到 Git clone 命令,格式如下:
git clone https://huggingface.co/spaces/你的用户名/你的Space名称
在终端运行该命令,即可克隆已连接 Hugging Face Space 的 Git 仓库。注意,这并非空仓库——其中已包含预设配置文件,帮助 Hugging Face 配置和部署你的应用。
在克隆下来的仓库中,你会发现一个名为 README.md 的文件,用于存放应用的元数据。YAML 区块定义了 Hugging Face 应如何构建你的应用:
- sdk
:设置为 streamlit
- sdk_version
:指定使用的 Streamlit 版本
- app_file
:应用的入口文件(通常为 app.py),用于启动 Space
你的 README.md 文件大致如下:
---
title: Llm Demo
emoji: 👀
colorFrom: pink
colorTo: blue
sdk: streamlit
sdk_version: 1.44.1
app_file: app.py
pinned: false
---
详细配置参考:https://huggingface.co/docs/hub/spaces-config-reference
3. 用 Streamlit 编写你的 LLM 应用
现在 Space 已搭建好且已克隆到本地,接下来开始构建你的应用!
首先,创建 requirements.txt 文件。该文件告知 Hugging Face 应用所需的 Python 库,构建时会自动安装:
本项目需用到 transformers 和 PyTorch 以运行 LLM 应用。你的 requirements.txt 文件应如下:
transformers
torch
streamlit
本次演示采用 Google 的 FLAN-T5-small 轻量级模型,占用约 300MB 内存。由于我们用的是 CPU 实例,较复杂模型可能运行缓慢或因内存不足无法加载。我们将基于该模型搭建一个简单的 Streamlit 聊天机器人界面。
新建 app.py 文件,并粘贴以下代码:
import streamlit as st
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM, pipeline
@st.cache_resource
def load_model():
tokenizer = AutoTokenizer.from_pretrained("google/flan-t5-small")
model = AutoModelForSeq2SeqLM.from_pretrained("google/flan-t5-small")
return pipeline("text2text-generation", model=model, tokenizer=tokenizer)
st.set_page_config(page_title="LLM Demo", layout="centered")
st.title("🚀 FLAN-T5 Small - HuggingFace Demo")
pipe = load_model()
user_input = st.text_area("Enter your instruction or question:", "")
if st.button("Generate Response"):
if user_input.strip() == "":
st.warning("Please enter some text.")
else:
with st.spinner("Generating..."):
output = pipe(user_input, max_new_tokens=100)[0]["generated_text"]
st.success("### Response:")
st.write(output)
这段代码通过 transformers 库加载 FLAN-T5-small 模型,构建文本生成管道,实现基于用户输入生成回复。随后使用 Streamlit 搭建简洁交互界面,包含输入框,用户可输入指令或问题。提交后,应用会以聊天机器人的形式返回 LLM 生成的回答。为提高性能,@st.cache_resource 装饰器用于缓存模型,避免每次交互都重新加载,提升速度并减少资源消耗。
本地测试应用,请依次运行以下命令:
pip install -r requirements.txt
streamlit run app.py
4. 推送最新更改到 Spaces
应用准备好后,只需将代码推送到 Hugging Face Spaces 的仓库即可上线。具体步骤如下:
首先,将本地代码更改提交到 Git 仓库:
git add .
git commit -m "Initial commit with Streamlit LLM app"
推送到远程仓库前,需用有写权限的 Access Token 进行认证。前往 Hugging Face 账户的访问令牌设置页,创建一个具有写权限的新令牌,并妥善保存(页面只显示一次)。
在终端使用 Hugging Face CLI 登录认证:
pip install huggingface-hub
huggingface-cli login
系统会提示粘贴访问令牌并确认。大多数用户此流程可顺利完成,终端会提示登录成功。
认证完毕后,推送更改:
git push
如果你使用 macOS,可能会遇到 Git 推送失败、凭据冲突的已知问题:
如遇此情况,请用以下方法:
git push -u https://HF_USERNAME:HF_ACCESS_TOKEN@huggingface.co/spaces/HF_USERNAME/HF_SPACE_NAME
将 HF_USERNAME
、HF_ACCESS_TOKEN
、HF_SPACE_NAME
替换为你的实际用户名、访问令牌和空间名称。此命令显式使用令牌认证,绕过系统凭据问题,确保应用成功部署。
5. 测试已部署的 Space
Hugging Face Spaces 检测到仓库更新后,会自动启动构建和部署流程。你能看到实时构建日志,包括依赖安装和 Streamlit 应用的启动过程。
一切顺利的话,应用会顺利上线并可使用——无需手动设置!应用上线后界面大致如下:
你现在可以直接在浏览器与聊天机器人互动,也能获得一个公开链接分享给他人。这是向全世界展示你的 LLM 项目的极简、低成本方式!需要注意的是本教程用的是 Flan-T5-small,仅适合轻量级和 CPU 场景,对于复杂问题准确率有限。你可以根据需要,轻松更换为更强大或更精调的模型。
总结
本教程中,我们用 Streamlit 在 Hugging Face Spaces 上部署了一个轻量级 LLM 聊天机器人——从创建新空间、编写应用到上线部署,全部实现零成本。只需几个步骤,就能将本地原型变为可分享的 web 应用,底层由 Flan-T5-small 提供动力。你可以进一步完善界面(如添加聊天记录、markdown 支持)、更换更强大的模型,或尝试 Gradio、Docker 等其他后端。对于更复杂的应用,还能增加文件上传、语音输入等功能,或迁移到 GPU 实例以应对更重的负载。
Hugging Face Spaces 让你的 LLM 项目上线变得异常简单,尽情搭建、实验、分享你的创意吧!