我想知道在机器学习笔记本中运行多行 shell 命令的最佳实践
这是一些伪代码以及我如何在笔记本单元中运行它。
%%bash
conda activate myenv &&
torchrun
--standalone
--nnodes=1
--nproc-per-node=$NUM_TRAINERS
YOUR_TRAINING_SCRIPT.py (--arg1 ... train script args...
我正在激活 conda env,因为我注意到 magic bash 函数单独没有使用正确的环境。
使用azure.ai.ml中的命令功能会更好吗?
我发现这种方式在某种程度上容易出错,即使激活 conda 并使用 magic 函数也是如此。
有更好的选择吗?
来自
command
的 azure.ai.ml
作业是更好的选择,您可以在其中向计算集群提供要运行的所有详细信息。
无论您在笔记本单元中运行什么,它都会在计算实例中执行,而计算实例不适合此类工作负载。
计算实例只有一个节点,而计算集群可以有更多节点。计算集群可以为计算任务提供更多的内存和并行性。
因此,您需要通过提交
command
作业来在计算集群中运行作业。
当涉及到您的环境时,您不需要像在 bash 命令中那样更改它。您所要做的就是将
environment
对象传递给 command
作业类,其中包含您想要的环境的详细信息。
以下是示例。
custom_job_env = Environment(
name=custom_env_name,
description="Custom environment for Credit Card Defaults job",
tags={"scikit-learn": "1.0.2"},
conda_file=os.path.join(dependencies_dir, "conda.yaml"),
image="mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest",
)
接下来,将其传递给命令类。
job = command(
....
command="python main.py --data ${{inputs.data}} --test_train_ratio ${{inputs.test_train_ratio}} --learning_rate ${{inputs.learning_rate}} --registered_model_name ${{inputs.registered_model_name}}",
environment=custom_job_env,
display_name="credit_default_prediction",
)
参考这个 Pytorch分布式训练示例代码。
此外,请参阅可以为
command
类配置的更多参数此处。