自託管標註工具:各自需要什麼才能執行,以及部署在哪裡
從服務、資料庫、登入和備份方面比較 Label Studio、CVAT、doccano、Argilla、INCEpTION 和 Potato 的自託管安裝,並按成本比較託管平臺。
自託管的標註工具需要它所在的伺服器提供四樣東西:一塊重啟後資料仍在的磁碟,一個工具自身文件推薦用於生產環境的資料庫,一種讓標註者登入的方式,以及一份你至少成功恢復過一次的備份。各個開源工具差別最大的地方,在於它們自帶多少個服務,從一個容器到十八個不等,而這個數字決定了一項研究要承擔的大部分託管工作。
這裡的自託管,是指在你自己掌控的機器上執行標註工具,可以是實驗室伺服器、大學的雲資源配額,也可以是租用的虛擬機器,這樣資料就永遠不會經過廠商的服務。當倫理委員會、資料使用協議或醫院不允許資料外流時,自託管通常就是答案。下面的比較依據各項目截至 2026 年 10 月的文件,介紹六款開源工具的自託管安裝各需要什麼,然後按成本和重啟後保留什麼來比較各託管平臺。
自託管安裝的要求
下面每款工具都儲存三類狀態:待標註的條目(例如文本、影像、媒體)、標註結果,以及把兩者聯絡起來的賬號和項目。自託管安裝必須把這三類狀態都放在重啟後仍在的磁碟上,在別處做好備份,並在前面加上登入。另有兩個選擇取決於工具的架構。自帶 SQLite 的工具通常推薦在生產環境中使用資料庫伺服器,而自帶佇列、快取或搜尋引擎的工具,還需要讓這些元件各自執行並持久化。大部分託管工作都來自這些額外的服務。每多一個服務,就多一個要保持健康的容器、多一個要備份的卷,而且每次升級時,它的版本都必須與其他服務保持相容。
六款工具的比較
下表彙總了各項目文件對自託管生產安裝的說明。“服務數”統計的是項目參考 Docker Compose 檔案中的容器數量。
| 工具 | 支援的部署形式 | 服務數 | 資料庫 | 免費版中的 SSO | 伺服器備份指南 |
|---|---|---|---|---|---|
| Label Studio | pip、Docker、Compose、Helm | 3 | 預設 SQLite,規模較大時推薦 PostgreSQL | SAML SSO 和 LDAP 僅限企業版 | 僅企業版文件 |
| CVAT | Compose、Helm | 18 | PostgreSQL | 社群版有 LDAP 文件;OIDC 和 SAML SSO 屬於企業版 | 有 |
| doccano | pip、Docker、Compose | 6 | 預設 SQLite,生產用 Compose 中為 PostgreSQL | GitHub 和 Okta OAuth | 未找到 |
| Argilla | Hugging Face Spaces、Compose | 5 | 預設 SQLite,支援 PostgreSQL,另需 Elasticsearch 或 OpenSearch | OAuth2 和 Keycloak | 僅資料集匯出 |
| INCEpTION | JAR、Docker、Compose | 2 | 內嵌 HSQLDB,生產環境推薦 MariaDB | SAML2 和 OIDC | 有 |
| Potato | pip、Docker、potato deploy | 1 | 檔案和 SQLite,MySQL 可選 | OAuth 和 OIDC 提供方 | 內建備份到 HF 或 S3 |
Label Studio 可以作為單個容器執行,也可以作為由 nginx、應用本身和 PostgreSQL 組成的 Compose 棧執行。它預設使用 SQLite,其儲存指南建議在任務超過 10 萬個、併發使用者達到 5 個或以上時考慮 PostgreSQL。安裝指南要求至少 8 GB 記憶體,推薦 16 GB,並推薦生產環境使用 50 GB 磁碟。版本對比把 SAML SSO、LDAP、基於角色的訪問控制和活動日誌列為付費功能,而在社群版中,每個使用者都能看到每個項目。
CVAT 以 Docker Compose 或在 Kubernetes 上執行。它的參考 Compose 檔案定義了 18 個服務,其中包括 PostgreSQL、Redis、用於快取的 kvrocks、八個後臺 worker、Traefik、一個用於授權的 Open Policy Agent 服務,以及一套 ClickHouse 加 Grafana 的分析棧。CVAT 逐步記錄了備份方法。它的指南會停止容器,歸檔資料庫、媒體和分析資料卷,並提醒恢復時需要完全相同的 CVAT 版本。社群版有 LDAP 的文件,而 OIDC 和 SAML 單點登入被標註為企業版功能。
doccano 一開始是一個使用 SQLite 的容器,它的生產用 Compose 檔案又加入了 Celery、RabbitMQ、nginx 和 PostgreSQL。它的安裝指南提醒,升級軟體包會丟失 SQLite 資料庫。它有 GitHub 和 Okta 登入的文件。截至 2026 年 10 月,它在 PyPI 上的最新版本是 2023 年 7 月釋出的 1.8.4;2026 年 1 月在 GitHub 上釋出的 1.8.5 已從 PyPI 撤回。
Argilla 部署在 Hugging Face Spaces 上,或者用 Docker Compose 部署,後者會讓伺服器、一個 worker、PostgreSQL、Elasticsearch 和 Redis 一起執行。它需要 Elasticsearch 8.5 或 OpenSearch 2.4,部署指南指出,大多數部署問題都與 Elasticsearch 有關。在沒有持久儲存的免費 Space 上,一次重啟就會丟失資料集、工作區和使用者。它最近的一個版本釋出於 2025 年 3 月。
INCEpTION 以 Java 應用或容器執行,生產環境推薦使用 MariaDB 資料庫,因為它內嵌的 HSQLDB 在機器崩潰時可能損壞。標註和文本以檔案形式儲存在它的主目錄下,管理員指南完整介紹了系統級的備份和恢復,其備份一節開頭就警告:“無法成功恢復的備份毫無價值”。
Potato 以單個程序執行,可以通過 pip 安裝,也可以用單個 Docker 映像。每位標註者的工作都儲存在輸出目錄下的一個檔案中,項目資料則存放在旁邊的 SQLite 裡,MySQL 是可選項而不是必需項。這個程序在記憶體中儲存條目池和分配佇列,所以它以一個 gunicorn worker 加更多執行緒的方式執行,要擴容就換一臺更大的機器,而不是增加伺服器。通過 Google、GitHub、Hugging Face 或任何 OIDC 提供方登入,是開源軟體包的一部分,在 authentication.providers 下配置。
每款工具的服務數反映了它所承擔的工作。CVAT 的十八個服務包括分別負責匯入、匯出、分塊和品質報告的 worker、一套分析棧和基於策略的授權,一個長期運行同一套安裝的大團隊用得上這些。Argilla 的資料集需要一個搜尋引擎。Potato 保持只用一個容器,適合由一個實驗室搭建、執行幾週後就拆掉的研究。
按成本和磁碟永續性比較託管平臺
這些工具都能在裝有 Docker 的虛擬機器上執行,主要的選擇在於託管平臺的磁碟能否在重啟後保留。下面的費用是 Potato 2.10 為其 potato deploy 目標在預設規格下列印的估算,同樣的機器以同樣的價格也能執行其他工具,前提是滿足各工具的記憶體需求。
| 託管平臺 | 每月費用 | 重啟後磁碟是否保留 |
|---|---|---|
| AWS Lightsail,2 GB | $12 | 是 |
| Hetzner Cloud,2 vCPU 和 4 GB | 約 €6 | 是 |
| Fly.io Machine,帶 1 GB 卷 | 約 $6 | 是 |
| Jetstream2,需 ACCESS 資源配額 | 免費 | 是 |
| Render web service | 免費,或 $7 外加磁碟費用 | 僅限付費磁碟 |
| Heroku Basic dyno | $7 | 否 |
| Hugging Face Docker Space | PRO 或 Team 套餐 | 否 |
Jetstream2 是由 NSF 資助的科研雲,所以擁有 ACCESS 資源配額的美國研究人員無需付費,每個實例都會得到一個 DNS 名稱和一張普通證書。Lightsail 的固定價格包含 IPv4 地址和 60 GB 磁碟,而且只需要 lightsail:* 和 sts:GetCallerIdentity 許可權,適合許可權受限的大學 IAM 角色。2 GB 的 Lightsail 實例足以執行 Potato,而 Label Studio 宣告的 8 GB 最低記憶體則需要更大的套餐。
在會清空磁碟的平臺上備份
Heroku 每天都會清空磁碟,Render 的免費層和 Hugging Face Spaces 則在重啟時丟失磁碟。在這些平臺上執行的研究需要一份同樣能恢復的備份,否則回來的標註者會看到一個空的任務。
從 2.10 版起,Potato 的 backup 配置塊預設每五分鐘把標註輸出和項目資料庫的快照複製到一個 Hugging Face 資料集或相容 S3 的儲存桶中,並在伺服器以空磁碟啟動時恢復它們。恢復時會把賬號和標註一起找回,所以標註者用原來的密碼登入,從上次停下的地方繼續,而且恢復永遠不會覆蓋磁碟上已有的標註。在伺服器環境中設定好 HF_TOKEN、安裝好 hosting 附加依賴後,把下面這個配置塊加進配置:
backup:
schedule_minutes: 5
restore_on_boot: true
sinks:
- type: huggingface
repo_id: lab/pilot-annotationspotato deploy up 用 --backup hf 或 --backup s3 新增同樣的備份,而且除非用 --demo 宣告這些標註可以丟棄,否則它不會在沒有備份的情況下部署到 Heroku 或 Hugging Face Space。Render、Railway、Fly 和 ECS Express 在任何情況下都要求有備份,因為項目是通過備份的儲存到達這些平臺的。在磁碟確實會保留的平臺上,備份仍會在伺服器之外保留第二份副本,這樣既能應對重啟,也能應對實例被刪除。
無論用哪款工具,都要在研究開始前測試恢復。從備份啟動一個全新的實例,以標註者身份登入,檢查你做的最後一條標註是否還在。對於 Potato,potato deploy pull 會把一次部署收集到的所有內容複製到你的機器上,而 potato deploy destroy 不會刪除一個從未被拉取過的部署,所以在研究結束時先執行拉取。在本地或雲端執行 Potato 給出了每個託管平臺對應的命令。
延伸閱讀
- 生產部署:gunicorn、Docker 和反向代理
- SSO 與 OAuth 認證:配置登入提供方
- 標註工具對比:比較功能而非託管