本文将为您示范如何使用,并发送出一个 Hello Primus 的范例任务。
在成功运行 Primus Hello 后,您可以到 下一章节---基础使用 中,进一步了解 Primus 如何协同 TensorFlow 进行一个分布式的模型训练任务。
如果您是第一次使用 EMR DataScience 集群,首先需要做一些准备动作!
因为以下的范例都是通过 Yarn 使用者操作的,您必须配置 Yarn 使用者的 HDFS 的读写权限。这个部分的配置,您可以透过使用 EMR 里的 Ranger 组件来完成,详细步骤可以参考以下的截图。
需要在 快速配置服务端口 中,给源地址和对应端口添加白名单才可继续访问。
访问时需要的用户名和密码可以在 Ranger服务 的服务参数中获取。
在完成准备工作后,让我们在发送我们的第一个 Primus 任务之前,先让我们一起看看 Hello Primus 任务的 Primus 训练配置,我们此时也可以察觉 Hello Primus 是一个慵懒的任务,因为在每个角色在说完 Hello 到 Goodbye 之间偷睡了 900 秒!
{ "name": "primus_basic_hello", // 任务名称 "maxAppAttempts": 1, // 重试次数 "role": [ // 角色定义 { "roleName": "chief", // 角色名称 "num": 1, // 数量 "vcores": 1, // CPU 配置 "memoryMb": 1024, // Mem 配置 "jvmMemoryMb": 1024, // Java Mem 配置 "command": "env && echo 'Hello from Chief' && sleep 900 && echo 'Goodbye from Chief'", // 训练指令 "successPercent": 100, // 角色退出条件 (100% 需要训练进程自行退出,目前仅支援 100 跟 0) "failover": { // 角色失败处理 "commonFailoverPolicy": { "maxFailureTimes": 1, // 失败重试 "maxFailurePolicy": "FAIL_ATTEMPT" // 角色失败时,失败这次 YARN Attempt } } }, { "roleName": "ps", "num": 1, "vcores": 1, "memoryMb": 1024, "jvmMemoryMb": 1024, "command": "env && echo 'Hello from PS' && sleep 900 && echo 'Goodbye from PS'", "successPercent": 100, "failover": { "commonFailoverPolicy": { "maxFailureTimes": 1, "maxFailurePolicy": "FAIL_ATTEMPT" } } }, { "roleName": "worker", "num": 1, "vcores": 1, "memoryMb": 1024, "jvmMemoryMb": 1024, "command": "env && echo 'Hello from worker' && sleep 900 && echo 'Goodbye from worker'", "successPercent": 100, "failover": { "commonFailoverPolicy": { "maxFailureTimes": 1, "maxFailurePolicy": "FAIL_ATTEMPT" } } } ] }
现在我们终于可以发送我们的第一个 Primus 训练任务了!
# Change to yarn user $ su --shell=/bin/bash - yarn # Move to primus directory $ cd /usr/lib/emr/current/tensorflow_on_yarn/ # Submit primus-hello! $ primus-submit --primus_conf examples/hello/primus_config.json ... 22/03/03 18:36:47 INFO impl.YarnClientImpl: Submitted application <YARN-APPLICATION-ID> 22/03/03 18:36:47 INFO client.YarnSubmitCmdRunner: Tracking URL: http://emr-master-1:8088/proxy/<YARN-APPLICATION-ID>/ 22/03/03 18:36:57 INFO client.YarnSubmitCmdRunner: Training successfully started. Scheduling took 10010 ms. 22/03/03 18:38:18 INFO client.YarnSubmitCmdRunner: State: FINISHED Progress: 100.0% 22/03/03 18:38:18 INFO client.YarnSubmitCmdRunner: Application <YARN-APPLICATION-ID> finished with state FINISHED at 2022-03-03 18:38 22/03/03 18:38:18 INFO client.YarnSubmitCmdRunner: Final Application Status: SUCCEEDED ... # Verify the results (Can check in another terminal before the completion of the Primus application) $ yarn logs --applicationId <YARN-APPLICATION-ID> | grep -i hello ... Hello from Chief Hello from PS Hello from worker ...
由于 Primus 训练任务是一个标准的 YARN 任务,我们是可以在 YARN UI 上观察 Primus 训练任务!