OA0
OA0 是一个探索 AI 的社区
现在注册
已注册用户请  登录
OA0  ›  代码  ›  Label Studio ML Backend — 为标注平台接入机器学习能力

Label Studio ML Backend — 为标注平台接入机器学习能力

 
  rainbow ·  2026-04-13 11:00:25 · 6 次点击  · 0 条评论  

Label Studio ML 后端是什么?

Label Studio ML 后端是一个 SDK,它允许您包装您的机器学习代码并将其转换为 Web 服务器。该 Web 服务器可以连接到正在运行的 Label Studio 实例,以实现标注任务的自动化。

如果您只需要将静态的预标注数据加载到 Label Studio 中,运行 ML 后端可能有些大材小用。相反,您可以导入预标注数据

快速开始

要开始使用模型,请使用 docker-compose 来运行 ML 后端服务器。

使用以下命令在 http://localhost:9090 启动 ML 后端服务:

git clone https://github.com/HumanSignal/label-studio-ml-backend.git
cd label-studio-ml-backend/label_studio_ml/examples/{MODEL_NAME}
docker-compose up

{MODEL_NAME} 替换为您想要使用的模型名称(见下文)。

允许 ML 后端访问 Label Studio 数据

在大多数情况下,您需要设置 LABEL_STUDIO_URLLABEL_STUDIO_API_KEY 环境变量,以允许 ML 后端访问 Label Studio 中的媒体数据。在文档中了解更多

模型

此仓库支持以下模型。其中一些无需任何额外设置即可工作,而另一些则需要设置额外的参数。

查看 必需参数 列,了解是否需要设置任何额外参数。

  • 预标注 列表示该模型是否可用于 Label Studio 中的预标注:您可以在打开标注页面时或为一批数据运行预测后看到预标注数据。
  • 交互模式 列表示该模型是否可用于 Label Studio 中的交互式标注:在执行标注页面操作时查看交互式预测。
  • 训练 列表示该模型是否可用于 Label Studio 中的训练:根据提交的标注更新模型状态。
模型名称 描述 预标注 交互模式 训练 必需参数 标签类型(任意或固定)
bert_classifier 使用 Huggingface 进行文本分类 任意
easyocr 自动化 OCR。使用 EasyOCR 固定(字符)
flair 使用 flair 进行 NER 任意
gliner 使用 GLiNER 进行 NER 任意
grounding_dino 带提示的目标检测。详情见 GroundingDINO 任意
grounding_sam 结合 PromptsSAM 2 的目标检测 任意
huggingface_llm 使用 Hugging Face 进行 LLM 推理 任意
huggingface_ner 使用 Hugging Face 进行 NER 任意
interactive_substring_matching 简单的关键词搜索 任意
langchain_search_agent 结合 Google 搜索和 Langchain 的 RAG 管道 OPENAI_API_KEY, GOOGLE_CSE_ID, GOOGLE_API_KEY 任意
llm_interactive 使用 OpenAI、Azure LLMs 进行提示工程 OPENAI_API_KEY 任意
mmdetection 使用 OpenMMLab 进行目标检测 任意
nemo_asr 使用 NVIDIA NeMo 进行语音 ASR 固定(词汇和字符)
paddleocr 使用 PaddleOCR (PP-OCRv5) 进行 OCR 固定(字符)
segment_anything_2_image 使用 SAM 2 进行图像分割 任意
segment_anything_model 使用 Meta 进行图像分割 任意
sklearn_text_classifier 使用 scikit-learn 进行文本分类 任意
spacy 使用 SpaCy 进行 NER 固定(参见文档
tesseract 交互式 OCR。详情见 Tesseract 固定(字符)
timeseries_segmenter 使用小型 LSTM 网络进行时间序列分割 固定
watsonX 使用 WatsonX 进行 LLM 推理并与 WatsonX.data 集成 任意
yolo 支持所有 YOLO 任务:YOLO 任意

(高级用法)开发您自己的模型

要开始开发您自己的 ML 后端,请按照以下说明操作。

1. 安装

从仓库下载并安装 label-studio-ml

git clone https://github.com/HumanSignal/label-studio-ml-backend.git
cd label-studio-ml-backend/
pip install -e .

2. 创建空的 ML 后端:

label-studio-ml create my_ml_backend

您可以进入 my_ml_backend 目录并修改代码以实现您自己的推理逻辑。

目录结构应如下所示:

my_ml_backend/
├── Dockerfile
├── docker-compose.yml
├── model.py
├── _wsgi.py
├── README.md
└── requirements.txt

Dockerfiledocker-compose.yml 用于通过 Docker 运行 ML 后端。
model.py 是主文件,您可以在其中实现自己的训练和推理逻辑。
_wsgi.py 是一个辅助文件,用于通过 Docker 运行 ML 后端(您无需修改它)。
README.md 是一个包含如何运行 ML 后端说明的自述文件。
requirements.txt 是一个包含 Python 依赖项的文件。

3. 实现预测逻辑

在您的模型目录中,找到 model.py 文件(例如,my_ml_backend/model.py)。

model.py 文件包含一个继承自 LabelStudioMLBase 的类声明。该类提供了 Label Studio 用于与 ML 后端通信的 API 方法的包装器。您可以重写这些方法以实现自己的逻辑:

def predict(self, tasks, context, **kwargs):
    """为任务进行预测。"""
    return predictions

predict 方法用于为任务进行预测。它使用以下参数:

一旦您实现了 predict 方法,就可以在 Label Studio 中看到来自已连接 ML 后端的预测。

4. 实现训练逻辑(可选)

您还可以实现 fit 方法来训练您的模型。fit 方法通常用于在已标注数据上训练模型,尽管它也可以用于任何需要数据持久化的任意操作(例如,将标注数据存储在数据库中、保存模型权重、保留 LLM 提示历史等)。

默认情况下,在 Label Studio 中的任何数据操作(如创建新任务或更新标注)时都会调用 fit 方法。您可以从项目设置的 Webhooks 部分修改此行为。

要实现 fit 方法,您需要在 model.py 文件中重写 fit 方法:

def fit(self, event, data, **kwargs):
    """在已标注数据上训练模型。"""
    old_model = self.get('old_model')
    # 编写更新模型的逻辑
    self.set('new_model', new_model)

其中:

  • event: 事件类型可以是 'ANNOTATION_CREATED''ANNOTATION_UPDATED' 等。
  • data: 从事件接收到的负载(更多信息请查看 Webhook 事件参考

此外,还有两个辅助方法可用于从 ML 后端存储和检索数据:

  • self.set(key, value) - 将数据存储在 ML 后端中
  • self.get(key) - 从 ML 后端检索数据

这两种方法都可以在 ML 后端代码的其他地方使用,例如,在 predict 方法中获取新的模型权重。

其他方法和参数

LabelStudioMLBase 类中还有其他可用的方法和参数:

  • self.label_config - 以 XML 字符串形式返回 Label Studio 标注配置
  • self.parsed_label_config - 以 JSON 形式返回 Label Studio 标注配置
  • self.model_version - 返回当前模型版本。
  • self.get_local_path(url, task_id) - 此辅助函数用于下载并缓存通常存储在 task['data'] 中的 URL,并返回其本地路径。该 URL 可以是:LS 上传的文件、LS 本地存储、LS 云存储或任何其他 http(s) URL。

不使用 Docker 运行

为了不使用 Docker 运行(例如,用于调试目的),您可以使用以下命令:

label-studio-ml start my_ml_backend

测试您的 ML 后端

修改 my_ml_backend/test_api.py 以确保您的 ML 后端按预期工作。

修改端口

要修改端口,请使用 -p 参数:

label-studio-ml start my_ml_backend -p 9091

将您的 ML 后端部署到 GCP

开始之前:

  1. 安装 gcloud
  2. 如果您的账户未激活,请初始化账单。
  3. 初始化 gcloud,输入以下命令并使用浏览器登录:
gcloud auth login
  1. 激活您的 Cloud Build API。
  2. 找到您的 GCP 项目 ID。
  3. (可选)将 GCP_REGION 与您的默认区域添加到环境变量中。

开始部署:

  1. 创建您自己的 ML 后端
  2. 开始部署到 GCP:
label-studio-ml deploy gcp {ml-backend-local-dir} \
--from={model-python-script} \
--gcp-project-id {gcp-project-id} \
--label-studio-host {https://app.heartex.com} \
--label-studio-api-key {YOUR-LABEL-STUDIO-API-KEY}
  1. Label Studio 部署模型后,您可以在控制台中找到模型端点。

故障排除

在 Windows 上排除 Docker 构建故障

如果您在 Windows 上运行 docker-compose up --build 时遇到类似以下错误:

exec /app/start.sh : No such file or directory
exited with code 1

此问题很可能是由于 Windows 处理文本文件中的行尾方式引起的,这可能会影响像 start.sh 这样的脚本。要解决此问题,请按照以下步骤操作:

步骤 1:调整 Git 配置

在克隆仓库之前,请确保您的 Git 配置为在检出文件时不自动将行尾转换为 Windows 样式 (CRLF)。这可以通过将 core.autocrlf 设置为 false 来实现。打开 Git Bash 或您首选的终端并执行以下命令:

git config --global core.autocrlf false

步骤 2:再次克隆仓库

如果您在调整 Git 配置之前已经克隆了仓库,则需要再次克隆以确保行尾正确保留:

  1. 删除现有的本地仓库。 确保您已备份任何更改或正在进行的工作。
  2. 再次克隆仓库。 使用标准的 Git clone 命令将仓库克隆到您的本地计算机。

步骤 3:构建并运行 Docker 容器

导航到您克隆的仓库中包含 Dockerfile 和 docker-compose.yml 的相应目录。然后,继续执行 Docker 命令:

  1. 构建 Docker 容器: 运行 docker-compose build 以基于 docker-compose.yml 中指定的配置构建 Docker 容器。
  2. 启动 Docker 容器: 构建过程完成后,使用 docker-compose up 启动容器。

附加说明

  • 此解决方案专门解决了由于行尾自动转换而在 Windows 上遇到的问题。如果您使用其他操作系统,此解决方案可能不适用。
  • 请记住检查您项目的 .gitattributes 文件(如果存在),因为它也会影响 Git 如何处理文件中的行尾。

通过遵循这些步骤,您应该能够解决由于行尾转换导致 Docker 在 Windows 上无法识别 start.sh 脚本的问题。

排除 Docker 镜像中 Pip 缓存重置故障

有时,您希望重置 pip 缓存以确保安装依赖项的最新版本。例如,Label Studio ML Backend 库在 requirements.txt 中被用作 label-studio-ml @ git+https://github.com/HumanSignal/label-studio-ml-backend.git。假设它已更新,并且您希望在您的 Docker 镜像中使用 ML 模型的最新版本。

您可以使用以下命令从头开始重建 Docker 镜像:

docker compose build --no-cache

排除 Bad GatewayService Unavailable 错误

如果您发送多个并发请求,可能会看到这些错误。

请注意,提供的 ML 后端示例是以开发模式提供的,不支持生产级别的推理服务。

排除 ML 后端无法进行简单自动标注或无法看到预测的问题

您必须确保 ML 后端可以访问您的 Label Studio 数据。如果不能,您可能会遇到以下问题:

  • 服务器日志中出现 no such file or directory 错误。
  • 在 Label Studio 中加载任务时无法看到预测。
  • 您的 ML 后端似乎已正确连接,但似乎无法在任务中完成任何自动
6 次点击  ∙  0 人收藏  
登录后收藏  
0 条回复
关于 ·  帮助 ·  PING ·  隐私 ·  条款   
OA0 - Omni AI 0 一个探索 AI 的社区
沪ICP备2024103595号-2
耗时 23 ms
Developed with Cursor