# Spaces 概览

Hugging Face Spaces 让您能够在几分钟内轻松创建和部署基于机器学习的演示。观看以下视频，快速了解 Spaces：

在以下章节中，您将学习创建 Space、配置 Space 以及将代码部署到 Space 的基础知识。

## 创建新的 Space

**要创建新的 Space**，请访问 [Spaces 主页](https://huggingface.co/spaces) 并点击 **创建新 Space**。除了为您的 Space 选择名称、选择可选的许可证以及设置您的 Space 的 [可见性](#space-visibility)（公开、受保护或私有）之外，系统还会提示您选择您的 Space 的 **SDK**。Hub 提供三种 SDK 选项：Gradio、Docker 和静态 HTML。如果您选择“Gradio”作为您的 SDK，您将被引导到一个显示以下页面的新仓库：

> [!WARNING]
> 静态 Spaces 对所有人免费。Gradio 和 Docker Spaces 需要计算资源，创建时需付费计划：个人账户为 PRO，组织为 Team 或 Enterprise。状态良好的免费个人账户仍可托管最多 2 个运行在 [ZeroGPU](./spaces-zerogpu) 上的 Gradio Spaces。

在底层实现上，Spaces 将您的代码存储在一个 git 仓库中，与模型和数据集仓库相同。得益于这一点，我们用于 Hub 上所有[其他仓库](./repositories)的相同工具（`git` 和 `git-xet`）也适用于 Spaces。请按照[仓库入门](./repositories-getting-started)中的相同流程向您的 Space 添加文件。每次推送新的提交时，Space 都会自动重新构建并重启。

如需了解创建第一个 Space 的分步教程，请参阅以下指南：
* [创建 Gradio Space](./spaces-sdks-gradio)
* [创建 Docker Space](./spaces-sdks-docker-first-demo)

## 空间可见性

您可以通过 **Settings** 选项卡中的可见性下拉菜单来设置 Space 的可见性。Spaces 支持三种可见性级别：**public**、**protected** 和 **private**。

> [!WARNING]
> 受保护的可见性是 PRO 或 Team & Enterprise 计划的一部分。

| | 公开 | 受保护 | 私有 |
|---|---|---|---|
| Hub 上的源代码 | 所有人可见 | 私有（仅所有者/协作者） | 私有（仅所有者/协作者） |
| 可通过嵌入 URL 访问的应用 | 是的 | 是的 | No |
| 可通过[自定义域名](./spaces-custom-domain)访问的应用 | 是的 | 是的 | No |
| 可被他人克隆 | 是的 | No | No |

**Public** Spaces 是完全公开的：任何人都可以查看源代码、访问正在运行的应用以及克隆该仓库。

**受保护的** Spaces 在 Hub 上保持其源代码私有——只有所有者和协作者可以查看或克隆该仓库。不过，正在运行的应用可以通过其嵌入 URL（`https://<space-subdomain>.hf.space`）访问，或者在配置了 [自定义域名](./spaces-custom-domain) 时通过该域名访问。这对于在不公开源代码的情况下托管网站或应用尤其有用。

**Private** Space 是完全私有的：源代码和正在运行的应用仅对所有者和协作者可见。该 Space 不会出现在搜索结果中，其他用户访问其 URL 时会收到 `404` 错误。

## 硬件资源

每个 Spaces 环境默认限制为 16GB 内存、2 个 CPU 核心以及 50GB 的（非持久化）磁盘空间。默认的 CPU Basic 硬件不产生按小时计费的费用，但创建运行在计算资源（Gradio 或 Docker）上的 Space 需要付费计划，而 Static Spaces 对所有人免费。您可以以[具有竞争力的价格](https://huggingface.co/pricing#spaces)升级到更好的硬件，包括多种 GPU 加速器。如需申请升级，请点击您 Space 中的_Settings_ 按钮，并选择您偏好的硬件环境。

| **硬件**           | **CPU**       | **内存**   | **GPU 内存**  | **每小时价格**  |
|----------------------- |-------------- |------------- |---------------- | ----------------- |
| CPU 基础              | 2 个 vCPU        | 16 GB        |                 | 免费              |
| CPU 升级            | 8 个 vCPU        | 32 GB        |                 | $0.03             | 
| Nvidia T4 - 小型      | 4 个 vCPU        | 15 GB        | 16 GB           | $0.40             |
| Nvidia T4 - 中等     | 8 个 vCPU        | 30 GB        | 16 GB           | $0.60             |
| 1x Nvidia L4           | 8 个 vCPU        | 30 GB        | 24 GB           | $0.80             |
| 4x Nvidia L4           | 48 个 vCPU       | 186 GB       | 96 GB           | $3.80             |
| 1x Nvidia L40S         | 8 个 vCPU        | 62 GB        | 48 GB           | $1.80             |
| 4x Nvidia L40S         | 48 个 vCPU       | 382 GB       | 192 GB          | $8.30             |
| 8x Nvidia L40S         | 192 vCPU      | 1534 GB      | 384 GB          | $23.50            |
| 1x Nvidia RTX PRO 6000 | 23 个 vCPU       | 256 GB       | 96 GB           | $2.75             |
| 2x Nvidia RTX PRO 6000 | 46 个 vCPU       | 512 GB       | 192 GB          | $5.50             |
| 4x Nvidia RTX PRO 6000 | 92 vCPU       | 1024 GB      | 384 GB          | $11.00            |
| 8x Nvidia RTX PRO 6000 | 184 个 vCPU      | 2048 GB      | 768 GB          | $22.00            |
| Nvidia A10G - 小型    | 4 个 vCPU        | 15 GB        | 24 GB           | $1.00             |
| Nvidia A10G - 大型    | 12 个 vCPU       | 46 GB        | 24 GB           | $1.50             |
| 2x Nvidia A10G - 大型 | 24 个 vCPU       | 92 GB        | 48 GB           | $3.00             |
| 4x Nvidia A10G - 大型 | 48 个 vCPU       | 184 GB       | 96 GB           | $5.00             |
| Nvidia A100 - 大型    | 12 个 vCPU       | 142 GB       | 80 GB           | $2.50             |
| 4x Nvidia A100         | 48 个 vCPU       | 568 GB       | 320 GB          | $10.00            |
| 8x Nvidia A100         | 96 vCPU       | 1136 GB      | 640 GB          | $20.00            |

注意：有关更详细和全面的定价信息，请访问[我们的定价页面](https://huggingface.co/pricing)。

您是否拥有一个出色的 Space，但需要帮助支付硬件升级费用？我们乐于为具有创新性的 Space 提供支持，因此请随时使用您 Space 的 _Settings_ 选项卡中的链接申请社区 GPU 资助，看看您的项目能否入选！

在我们的专门章节中阅读更多有关 [Spaces GPU 升级](./spaces-gpus) 和 [Spaces 磁盘使用量与存储](./spaces-storage) 的内容。

## 管理密钥和环境变量[[managing-secrets]]

如果您的应用需要环境变量（例如密钥或令牌），请勿在应用内部硬编码它们！相反，请前往您的 Space 仓库的 Settings 页面，添加一个新的 **variable** 或 **secret**。如果您需要存储非敏感的配置值，请使用 variables；如果要存储访问令牌、API 密钥或任何敏感值或凭据，请使用 secrets。

	
	

您可以使用：

* 如果您需要存储非敏感的配置值，请使用**变量**。它们可公开访问和查看，并且会自动添加到从您的 Spaces 复制生成的 Spaces 中。
* 用于存储访问令牌、API 密钥或任何敏感值或凭据的**Secrets**。它们是私有的，设置后无法从 Space 的设置页面读取其值。它们不会被添加到从您的仓库复制的 Spaces 中。

访问密钥和变量的方式因您使用的 Space SDK 而异：

- 对于静态 Spaces，两者均可通过 `window.huggingface.variables` 中的客户端 JavaScript 访问。
- 对于 Docker Spaces，请参阅[使用 Docker 进行环境管理](./spaces-sdks-docker#secrets-and-variables-management)

对于其他 Spaces，两者都会作为环境变量暴露给你的应用。以下是一个在 Python 中访问之前声明的 `MODEL_REPO_ID` 变量的非常简单的示例（对于 secrets 也是如此）：
```py
import os
print(os.getenv('MODEL_REPO_ID'))
```

当我们的 `Spaces Secrets Scanner` [发现硬编码的密钥](./security-secrets)时，Spaces 所有者会收到警告。

## 复制 Space

如果您想以另一个演示作为初始模板来构建新的演示，复制 Space 会很有用。如果您希望拥有一个专用于快速推理的独立升级版 Space，复制 Space 同样会很有帮助。

如果您想复制一个 Space，可以单击该 Space 右上角的三个点，然后单击 **Duplicate this Space**。执行此操作后，您将可以更改以下属性：

* Owner: 重复的 Space 可以位于您的账户下，或位于您拥有写入权限的任何组织中
* 空间名称
* 可见性：Space 默认为私有。有关可见性选项的更多信息，请参见[此处](./repositories-settings#repository-visibility)。
* 硬件：您可以选择 Space 运行的硬件。有关硬件升级的更多信息，请参见[此处](./spaces-gpus)。
* 存储：如果原始仓库使用了存储桶，系统将提示您配置存储。有关磁盘使用和存储的更多信息，请参见[此处](./spaces-storage)。
* Secrets 和 variables：如果原始仓库已设置了一些 secrets 和 variables，你可以在复制仓库时进行设置。

某些 Spaces 可能包含需要您配置的环境变量。在这种情况下，复制流程会自动从源 Space 填充公开的 Variables，并提醒您设置 Secrets。复制后的 Space 默认使用 CPU Basic 硬件，但您可以根据需要稍后升级。复制遵循与创建新 Space 相同的规则：复制 Gradio 或 Docker Space 要求目标账户或组织拥有付费计划（个人账户享有相同的 [ZeroGPU 免费层级](./spaces-zerogpu) 例外）。

## 网络

如果您的 Space 需要发起任何网络请求，您可以通过标准的 HTTP 和 HTTPS 端口（80 和 443）以及端口 8080 发起请求。发往其他端口的任何请求都会被阻止。

## 生命周期管理

在免费硬件上，如果长时间未使用，您的 Space 将进入“休眠”状态并停止运行。如果您希望 Space 持续运行，请考虑[升级到付费硬件](./spaces-gpus)。您还可以在**设置**标签页中手动暂停您的 Space。已暂停的 Space 将停止运行，直到拥有写入权限的用户将其重新启动。暂停期间不计费。

## 内置环境变量

在某些情况下，您可能希望以编程方式访问 Space 的作者或仓库名称。当您预期用户会复制您的 Space 时，此功能尤为有用。为此，Spaces 在运行时暴露了不同的环境变量（另请参阅 [Jobs 中的内置环境变量](./jobs-configuration#built-in-environment-variables)）。对于给定的 Space [`osanseviero/i-like-flan`](https://huggingface.co/spaces/osanseviero/i-like-flan)：

* `ACCELERATOR`：可用的加速器类型（例如 `t4-medium`、`a10g-small`），对于仅使用 CPU 的 Spaces，则为 `none`。
* `CPU_CORES`: 4
* `MEMORY`：15Gi
* `SPACE_AUTHOR_NAME`: osanseviero
* `SPACE_REPO_NAME`：i-like-flan
* `SPACE_TITLE`：我喜欢 Flan（在 README 文件中指定）
* `SPACE_ID`: `osanseviero/i-like-flan`
* `SPACE_HOST`: `osanseviero-i-like-flan.hf.space`
* `SPACE_CREATOR_USER_ID`：`6032802e1f993496bc14d9e3` - 这是最初创建该 Space 的用户的 ID。如果该 Space 隶属于某个组织，此信息会很有用。您可以通过向 `https://huggingface.co/api/users/{SPACE_CREATOR_USER_ID}/overview` 发起 API 调用来获取用户信息。
* `SPACE_SIGNING_SECRET`：一个专属于您 Space 的随机密钥，以 secret 的形式暴露。它在重启、重建和副本之间保持不变，因此您可以使用它对 cookie、OAuth state 或 CSRF token 等内容进行签名。如果您想使用自己的值，请在您的 Space 设置中添加一个名为 `SPACE_SIGNING_SECRET` 的 secret。

如果您的 Space 启用了 [OAuth](./spaces-oauth)，以下变量也可用：

* `OAUTH_CLIENT_ID`：您的 OAuth 应用的客户端 ID（公开）
* `OAUTH_CLIENT_SECRET`：您的 OAuth 应用的客户端密钥
* `OAUTH_SCOPES`：您的 OAuth 应用可访问的作用域。目前，此值始终为 `"openid profile"`。
* `OPENID_PROVIDER_URL`：OpenID 提供方的 URL。OpenID 元数据可在 [`{OPENID_PROVIDER_URL}/.well-known/openid-configuration`](https://huggingface.co/.well-known/openid-configuration) 处获取。

## 克隆仓库

您可以轻松地将您的 Space 仓库克隆到本地。首先，点击您的 Space 页面右上角的下拉菜单：

选择“Clone repository”，然后按照说明使用 HTTPS 或 SSH 将 Space 仓库克隆到本地机器。

## 在 Hub 上关联模型和数据集

您可以在 Space 的 README 元数据中添加其标识符，以展示该 Space 关联的所有模型和数据集。为此，您可以在 `models` 和 `datasets` 键下定义它们。除了在 README 文件中列出这些工件外，您还可以将它们记录在任何 `.py`、`.ini` 或 `.html` 文件中。我们会自动解析它们！

以下是一个从某个空间中链接两个模型的示例：

```
title: My lovely space
emoji: 🤗
colorFrom: blue
colorTo: green
sdk: docker
pinned: false
models:
- reach-vb/musicgen-large-fp16-endpoint
- reach-vb/wav2vec2-large-xls-r-1B-common_voice7-lt-ft
```

