You need to enable JavaScript to run this app.
导航
快速开始
最近更新时间:2023.11.27 14:22:06首次发布时间:2022.09.22 16:55:45

本文将为您示范如何使用,并发送出一个 Hello Primus 的范例任务。
在成功运行 Primus Hello 后,您可以到 下一章节---基础使用 中,进一步了解 Primus 如何协同 TensorFlow 进行一个分布式的模型训练任务。

1 准备工作

如果您是第一次使用 EMR DataScience 集群,首先需要做一些准备动作!
因为以下的范例都是通过 Yarn 使用者操作的,您必须配置 Yarn 使用者的 HDFS 的读写权限。这个部分的配置,您可以透过使用 EMR 里的 Ranger 组件来完成,详细步骤可以参考以下的截图。

1.1 进入 Ranger UI

  1. 集群的访问链接中需要为 ECS 实例绑定弹性公网 IP,公网操作详见绑定公网IP,其余详见访问链接

  2. 需要在 快速配置服务端口 中,给源地址和对应端口添加白名单才可继续访问。

  3. 访问时需要的用户名和密码可以在 Ranger服务 的服务参数中获取。

1.2 配置HDFS 的读写权限

  1. 点击 HDFS 文件夹下的 default_hadoop 配置入口:

  1. Policy Nameall-path 的操作栏中点击 编辑 按钮,进入权限配置入口:

  1. 在选择用户栏中添加 Yarn:

  1. 点击 save 按钮,权限即配置完成。

2 Hello Primus!

在完成准备工作后,让我们在发送我们的第一个 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 训练任务!