常见问题 (FAQ)¶
如何在批次中重命名列?
每个 Step
都有 input_mappings
和 output_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 上不可用。
自定义步骤/任务/LLM 也会被序列化吗?
不会,目前,只会序列化对 distilabel
库中类的引用,这意味着如果您定义了 pipeline 中使用的自定义类,则序列化不会中断,但反序列化将失败,因为该类将不可用,除非从同一文件使用。
如果 Pipeline.run
失败会发生什么?我会丢失所有数据吗?
不会,实际上,我们正在使用缓存机制将所有中间结果存储在磁盘中,因此,如果 Step
失败;pipeline 可以从该点重新运行而不会丢失数据,前提是 Pipeline
中没有任何更改。
所有数据都将存储在 .cache/distilabel
中,但只有来自叶子步骤的数据会在 Pipeline.run
执行结束时保留,因此请记住这一点。
有关 distilabel
中缓存机制的更多信息,您可以查看 学习 - 高级 - 缓存 部分。
另请注意,当独立运行 Step
或 Task
时,不会使用缓存机制,因此如果您想使用它,则应使用 Pipeline
上下文管理器。
如何在多个任务中使用相同的 LLM
,而无需多次加载它?
您可以使用 TGI 或 vLLM 等解决方案来服务 LLM,然后使用 AsyncLLM
客户端(如 InferenceEndpointsLLM
或 OpenAILLM
)连接到它。请参阅 服务 LLM 指南 以获取更多信息。
distilabel
可以与 OpenAI Batch API 一起使用吗?
可以,distilabel
通过 OpenAILLM 与 OpenAI Batch API 集成。查看 LLM - 离线批量生成 以获取有关如何使用它的小示例,并查看 高级 - 离线批量生成 以获取更详细的指南。
防止 免费 Serverless Endpoints 过载
当使用 InferenceEndpointsLLM 和免费 Serverless Endpoints 运行任务时,如果将批次大小设置为默认值(设置为 50),您可能会遇到一些错误,例如 Model is overloaded
。要解决此问题,请降低该值,或者更好的是在您的任务中设置 input_batch_size=1
。完成可能需要更长的时间,但请记住这是一个免费服务。