跳到内容

常见问题 (FAQ)

如何在批次中重命名列?

每个 Step 都有 input_mappingsoutput_mappings 属性,可用于重命名每个批次中的列。

但是 input_mappings 仅进行映射,这意味着如果您有一个包含列 A 的批次,并且想要将其重命名为 B,则应使用 input_mappings={"A": "B"},但这仅适用于该特定 Step,这意味着 pipeline 中的下一步仍然具有列 A 而不是 B

虽然 output_mappings 确实会应用重命名,这意味着如果 Step 生成列 A 并且您想要重命名为 B,则应使用 output_mappings={"A": "B"},这将应用于 pipeline 中的下一个 Step

共享 pipeline 时,API 密钥会暴露吗?

不会,这些密钥将使用 pydantic.SecretStr 屏蔽,这意味着在共享 pipeline 时不会暴露这些密钥。

这也意味着,如果您想重新运行自己的 pipeline,并且 API 密钥不是通过环境变量提供的,而是通过属性或运行时参数提供的,则需要再次提供它们。

它可以在 Windows 上工作吗?

可以,但是您可能需要提前设置 multiprocessing 上下文,以确保使用 spawn 方法,因为默认方法 fork 在 Windows 上不可用。

import multiprocessing as mp

mp.set_start_method("spawn")
自定义步骤/任务/LLM 也会被序列化吗?

不会,目前,只会序列化对 distilabel 库中类的引用,这意味着如果您定义了 pipeline 中使用的自定义类,则序列化不会中断,但反序列化将失败,因为该类将不可用,除非从同一文件使用。

如果 Pipeline.run 失败会发生什么?我会丢失所有数据吗?

不会,实际上,我们正在使用缓存机制将所有中间结果存储在磁盘中,因此,如果 Step 失败;pipeline 可以从该点重新运行而不会丢失数据,前提是 Pipeline 中没有任何更改。

所有数据都将存储在 .cache/distilabel 中,但只有来自叶子步骤的数据会在 Pipeline.run 执行结束时保留,因此请记住这一点。

有关 distilabel 中缓存机制的更多信息,您可以查看 学习 - 高级 - 缓存 部分。

另请注意,当独立运行 StepTask 时,不会使用缓存机制,因此如果您想使用它,则应使用 Pipeline 上下文管理器。

如何在多个任务中使用相同的 LLM,而无需多次加载它?

您可以使用 TGI 或 vLLM 等解决方案来服务 LLM,然后使用 AsyncLLM 客户端(如 InferenceEndpointsLLMOpenAILLM)连接到它。请参阅 服务 LLM 指南 以获取更多信息。

distilabel 可以与 OpenAI Batch API 一起使用吗?

可以,distilabel 通过 OpenAILLM 与 OpenAI Batch API 集成。查看 LLM - 离线批量生成 以获取有关如何使用它的小示例,并查看 高级 - 离线批量生成 以获取更详细的指南。

防止 免费 Serverless Endpoints 过载

当使用 InferenceEndpointsLLM 和免费 Serverless Endpoints 运行任务时,如果将批次大小设置为默认值(设置为 50),您可能会遇到一些错误,例如 Model is overloaded。要解决此问题,请降低该值,或者更好的是在您的任务中设置 input_batch_size=1。完成可能需要更长的时间,但请记住这是一个免费服务。

from distilabel.models import InferenceEndpointsLLM
from distilabel.steps import TextGeneration

TextGeneration(
    llm=InferenceEndpointsLLM(
        model_id="meta-llama/Meta-Llama-3.1-70B-Instruct",
    ),
    input_batch_size=1
)