Skip to content

Latest commit

 

History

History
781 lines (553 loc) · 20.4 KB

ExperimentConfig.md

File metadata and controls

781 lines (553 loc) · 20.4 KB

Experiment(实验)配置参考

创建 Experiment 时,需要给 nnictl 命令提供配置文件的路径。 配置文件是 YAML 格式,需要保证其格式正确。 本文介绍了配置文件的内容,并提供了一些示例和模板。

模板

  • 简化版(不包含 Annotation(标记)和 Assessor)
authorName: 
experimentName: 
trialConcurrency: 
maxExecDuration: 
maxTrialNum: 
#可选项: local, remote, pai, kubeflow
trainingServicePlatform: 
searchSpacePath: 
#可选项: true, false
useAnnotation: 
tuner:
  #可选项: TPE, Random, Anneal, Evolution
  builtinTunerName:
  classArgs:
    #可选项: maximize, minimize
    optimize_mode:
  gpuNum: 
trial:
  command: 
  codeDir: 
  gpuNum: 
#在本地使用时,machineList 可为空
machineList:
  - ip: 
    port: 
    username: 
    passwd:
  • 使用 Assessor
authorName: 
experimentName: 
trialConcurrency: 
maxExecDuration: 
maxTrialNum: 
#可选项: local, remote, pai, kubeflow
trainingServicePlatform: 
searchSpacePath: 
#可选项: true, false
useAnnotation: 
tuner:
  #可选项: TPE, Random, Anneal, Evolution
  builtinTunerName:
  classArgs:
    #可选项: maximize, minimize
    optimize_mode:
  gpuNum: 
assessor:
  #可选项: Medianstop
  builtinAssessorName:
  classArgs:
    #可选项: maximize, minimize
    optimize_mode:
  gpuNum: 
trial:
  command: 
  codeDir: 
  gpuNum: 
#在本地使用时,machineList 可为空
machineList:
  - ip: 
    port: 
    username: 
    passwd:
  • 使用 Annotation
authorName: 
experimentName: 
trialConcurrency: 
maxExecDuration: 
maxTrialNum: 
#可选项: local, remote, pai, kubeflow
trainingServicePlatform: 
#可选项: true, false
useAnnotation: 
tuner:
  #可选项: TPE, Random, Anneal, Evolution
  builtinTunerName:
  classArgs:
    #可选项: maximize, minimize
    optimize_mode:
  gpuNum: 
assessor:
  #可选项: Medianstop
  builtinAssessorName:
  classArgs:
    #可选项: maximize, minimize
    optimize_mode:
  gpuNum: 
trial:
  command: 
  codeDir: 
  gpuNum: 
#在本地使用时,machineList 可为空
machineList:
  - ip: 
    port: 
    username: 
    passwd:

说明

  • authorName

    • 说明

      authorName 是创建 Experiment 的作者。 待定: 增加默认值

  • experimentName

    • 说明

      experimentName 是 Experiment 的名称。
      待实现:增加默认值

  • trialConcurrency

    • 说明

      trialConcurrency 定义了并发尝试任务的最大数量。

      注意:如果 trialGpuNum 大于空闲的 GPU 数量,并且并发的 Trial 任务数量还没达到 trialConcurrency,Trial 任务会被放入队列,等待分配 GPU 资源。

  • maxExecDuration

    • 说明

      maxExecDuration 定义 Experiment 执行的最长时间。时间单位:{s, m, h, d},分别代表:{seconds, minutes, hours, days}。

      注意:maxExecDuration 设置的是 Experiment 执行的时间,不是 Trial 的。 如果 Experiment 达到了设置的最大时间,Experiment 不会停止,但不会再启动新的 Trial 作业。

  • debug

    • 说明

      NNI 会校验 remote, pai 和 Kubernetes 模式下 NNIManager 与 trialKeeper 进程的版本。 如果需要禁用版本校验,debug 应设置为 true。

  • maxTrialNum

    • 说明

      maxTrialNum 定义了 Trial 任务的最大数量,成功和失败的都计算在内。

  • trainingServicePlatform

    • 说明

      trainingServicePlatform 定义运行 Experiment 的平台,包括:{local, remote, pai, kubeflow}.

      • local 在本机的 ubuntu 上运行 Experiment。

      • remote 将任务提交到远程的 Ubuntu 上,必须用 machineList 来指定远程的 SSH 连接信息。

      • pai 提交任务到微软开源的 OpenPAI 上。 更多 OpenPAI 配置,参考 pai 模式

      • kubeflow 提交任务至 Kubeflow。 NNI 支持基于 Kubeflow 的 Kubenetes,以及Azure Kubernetes

  • searchSpacePath

    • 说明

      searchSpacePath 定义搜索空间文件的路径,此文件必须在运行 nnictl 的本机。

      注意: 如果设置了 useAnnotation=True,searchSpacePath 字段必须被删除。

  • useAnnotation

    • 说明

      useAnnotation 定义使用标记来分析代码并生成搜索空间。

      注意: 如果设置了 useAnnotation=True,searchSpacePath 字段必须被删除。

  • nniManagerIp

    • 说明

      nniManagerIp 设置 NNI 管理器运行的 IP 地址。 此字段为可选项,如果没有设置,则会使用 eth0 的 IP 地址。

      注意: 可在 NNI 管理器机器上运行 ifconfig 来检查 eth0 是否存在。 如果不存在,推荐显式设置 nnimanagerIp。

  • logDir

    • 说明

      logDir 配置存储日志和数据的目录。 默认值是 <user home directory>/nni/experiment

  • logLevel

    • 说明

      logLevel 为 Experiment 设置日志级别,支持的日志级别有:trace, debug, info, warning, error, fatal。 默认值是 info

  • logCollection

    • 说明

      logCollection 设置在 remote, pai, kubeflow, frameworkcontroller 平台下收集日志的方法。 日志支持两种设置,一种是通过 http,让 Trial 将日志通过 POST 方法发回日志,这种方法会减慢 trialKeeper 的速度。 另一种方法是 none,Trial 不将日志回传回来,仅仅回传 Job 的指标。 如果日志较大,可将此参数设置为 none

  • Tuner

    • 说明

      tuner 指定了 Experiment 的 Tuner 算法。有两种方法可设置 Tuner。 一种方法是使用 SDK 提供的 Tuner,需要设置 builtinTunerNameclassArgs。 另一种方法,是使用用户自定义的 Tuner,需要设置 codeDirectoryclassFileNameclassNameclassArgs

    • builtinTunerNameclassArgs

      • builtinTunerName

        builtinTunerName 指定了系统 Tuner 的名字,NNI SDK 提供了多种 Tuner,如:{TPE, Random, Anneal, Evolution, BatchTuner, GridSearch}。

      • classArgs

        classArgs 指定了 Tuner 算法的参数。 如果 builtinTunerName 是{TPE, Random, Anneal, Evolution},用户需要设置 optimize_mode

    • codeDir, classFileName, classNameclassArgs

      • codeDir

        codeDir 指定 Tuner 代码的目录。

      • classFileName

        classFileName 指定 Tuner 文件名。

      • className

        className 指定 Tuner 类名。

      • classArgs

        classArgs 指定了 Tuner 算法的参数。

    • gpuNum

      __gpuNum__ 指定了运行 Tuner 进程的 GPU 数量。 此字段的值必须是正整数。
      
      注意: 只能使用一种方法来指定 Tuner,例如:设置{tunerName, optimizationMode} 或 {tunerCommand, tunerCwd},不能同时设置。
      
    • includeIntermediateResults

      如果 __includeIntermediateResults__ 为 true,最后一个 Assessor 的中间结果会被发送给 Tuner 作为最终结果。 __includeIntermediateResults__ 的默认值为 false。
      
  • Assessor

    • 说明

      assessor 指定了 Experiment 的 Assessor 算法。有两种方法可设置 Assessor。 一种方法是使用 SDK 提供的 Assessor,需要设置 builtinAssessorNameclassArgs。 另一种方法,是使用用户自定义的 Assessor,需要设置 codeDirectoryclassFileNameclassNameclassArgs

    • builtinAssessorNameclassArgs

      • builtinAssessorName

        builtinAssessorName 指定了系统 Assessor 的名称, NNI 内置的 Assessor 有 {Medianstop,等等}。

      • classArgs

        classArgs 指定了 Assessor 算法的参数。

    • codeDir, classFileName, classNameclassArgs

      • codeDir

        codeDir 指定 Assessor 代码的目录。

      • classFileName

        classFileName 指定 Assessor 文件名。

      • className

        className 指定 Assessor 类名。

      • classArgs

        classArgs 指定了 Assessor 算法的参数。

    • gpuNum

      gpuNum 指定了运行 Assessor 进程的 GPU 数量。 此字段的值必须是正整数。

      注意: 只能使用一种方法来指定 Assessor,例如:设置 {assessorName, optimizationMode} 或 {assessorCommand, assessorCwd},不能同时设置。如果不需要使用 Assessor,可将其置为空。

  • trial (local, remote)

    • command

      command 指定了运行 Trial 进程的命令行。

    • codeDir

      codeDir 指定了 Trial 代码文件的目录。

    • gpuNum

      gpuNum 指定了运行 Trial 进程的 GPU 数量。 默认值为 0。

  • trial (pai)

    • command

      command 指定了运行 Trial 进程的命令行。

    • codeDir

      codeDir 指定了 Trial 代码文件的目录。

    • gpuNum

      gpuNum 指定了运行 Trial 进程的 GPU 数量。 默认值为 0。

    • cpuNum

      cpuNum 指定了 OpenPAI 容器中使用的 CPU 数量。

    • memoryMB

      memoryMB 指定了 OpenPAI 容器中使用的内存数量。

    • image

      image 指定了 OpenPAI 中使用的 docker 映像。

    • dataDir

      dataDir 是 HDFS 中用到的数据目录变量。

    • outputDir

      outputDir 是 HDFS 中用到的输出目录变量。在 OpenPAI 中,stdout 和 stderr 文件会在作业完成后,存放在此目录中。

  • trial (kubeflow)

    • codeDir

      codeDir 指定了代码文件的本机路径。

    • ps (可选)

      ps 是 Kubeflow 的 Tensorflow-operator 配置。

      • replicas

        replicasps 角色的副本数量。

      • command

        command 是在 ps 的容器中运行的脚本命令。

      • gpuNum

        gpuNum 是在 ps 容器中使用的 GPU 数量。

      • cpuNum

        cpuNum 是在 ps 容器中使用的 CPU 数量。

      • memoryMB

        memoryMB 指定了容器中使用的内存数量。

      • image

        image 设置了 ps 使用的 docker 映像。

    • worker

      worker 是 Kubeflow 的 Tensorflow-operator 配置。

      • replicas

        replicasworker 角色的副本数量。

      • command

        command 是在 worker 的容器中运行的脚本命令。

      • gpuNum

        gpuNum 是在 worker 容器中使用的 GPU 数量。

      • cpuNum

        cpuNum 是在 worker 容器中使用的 CPU 数量。

      • memoryMB

        memoryMB 指定了容器中使用的内存数量。

      • image

        image 设置了 worker 使用的 docker 映像。

  • localConfig

    localConfig 仅在 trainingServicePlatform 设为 local 时有效,否则,配置文件中不应该有 localConfig 部分。

    • gpuIndices

      gpuIndices 用于指定 GPU。设置此值后,只有指定的 GPU 会被用来运行 Trial 任务。 可指定单个或多个 GPU 的索引,多个 GPU 之间用逗号(,)隔开,例如 10,1,3

  • machineList

    如果 trainingServicePlatform 为 remote,则需要设置 machineList。否则应将其置为空。

    • ip

      ip 是远程计算机的 ip 地址。

    • port

      端口 是用于连接远程计算机的 ssh 端口。

      注意:如果 port 设为空,则为默认值 22。

    • username

      username 是远程计算机的用户名。

    • passwd

      passwd 指定了账户的密码。

    • sshKeyPath

      如果要使用 ssh 密钥登录远程计算机,则需要设置 sshKeyPathsshKeyPath 为有效的 ssh 密钥文件路径。

      注意:如果同时设置了 passwd 和 sshKeyPath,NNI 会使用 passwd。

    • passphrase

      passphrase 用于保护 ssh 密钥,如果没有使用,可为空。

    • gpuIndices

      gpuIndices 用于指定 GPU。设置此值后,远程计算机上只有指定的 GPU 会被用来运行 Trial 任务。 可指定单个或多个 GPU 的索引,多个 GPU 之间用逗号(,)隔开,例如 10,1,3

  • kubeflowConfig:

    • operator

      operator 指定了 kubeflow 使用的 operator,NNI 当前版本支持 tf-operator

    • storage

      storage 指定了 kubeflow 的存储类型,包括 {nfsazureStorage}。 此字段可选,默认值为 nfs。 如果使用了 azureStorage,此字段必须填写。

    • nfs

      server 是 NFS 服务器的地址

      path 是 NFS 挂载的路径

    • keyVault

      如果用户使用 Azure Kubernetes Service,需要设置 keyVault 来使用 Azure 存储账户的私钥。 参考: https://docs.microsoft.com/en-us/azure/key-vault/key-vault-manage-with-cli2

      • vaultName

        vaultName 是 az 命令中 --vault-name 的值。

      • name

        name 是 az 命令中 --name 的值。

    • azureStorage

      如果用户使用了 Azure Kubernetes Service,需要设置 Azure 存储账户来存放代码文件。

      • accountName

        accountName 是 Azure 存储账户的名称。

      • azureShare

        azureShare 是 Azure 文件存储的共享参数。

  • paiConfig

    • userName

      userName 是 OpenPAI 的用户名。

    • password

      password 是 OpenPAI 用户的密码。

    • host

      host 是 OpenPAI 的主机地址。

样例

  • 本机模式

    如果要在本机运行 Trial 任务,并使用标记来生成搜索空间,可参考下列配置:

    authorName: test
    experimentName: test_experiment
    trialConcurrency: 3
    maxExecDuration: 1h
    maxTrialNum: 10
    #可选项: local, remote, pai, kubeflow
    trainingServicePlatform: local
    #可选项: true, false
    useAnnotation: true
    tuner:
      #可选项: TPE, Random, Anneal, Evolution
      builtinTunerName: TPE
      classArgs:
        #可选项: maximize, minimize
        optimize_mode: maximize
      gpuNum: 0
    trial:
      command: python3 mnist.py
      codeDir: /nni/mnist
      gpuNum: 0

    增加 Assessor 配置

    authorName: test
    experimentName: test_experiment
    trialConcurrency: 3
    maxExecDuration: 1h
    maxTrialNum: 10
    #可选项: local, remote, pai, kubeflow
    trainingServicePlatform: local
    searchSpacePath: /nni/search_space.json
    #可选项: true, false
    useAnnotation: false
    tuner:
      #可选项: TPE, Random, Anneal, Evolution
      builtinTunerName: TPE
      classArgs:
        #可选项: maximize, minimize
        optimize_mode: maximize
      gpuNum: 0
    assessor:
      #可选项: Medianstop
      builtinAssessorName: Medianstop
      classArgs:
        #可选项: maximize, minimize
        optimize_mode: maximize
      gpuNum: 0
    trial:
      command: python3 mnist.py
      codeDir: /nni/mnist
      gpuNum: 0

    或者可以指定自定义的 Tuner 和 Assessor:

    authorName: test
    experimentName: test_experiment
    trialConcurrency: 3
    maxExecDuration: 1h
    maxTrialNum: 10
    #可选项: local, remote, pai, kubeflow
    trainingServicePlatform: local
    searchSpacePath: /nni/search_space.json
    #可选项: true, false
    useAnnotation: false
    tuner:
      codeDir: /nni/tuner
      classFileName: mytuner.py
      className: MyTuner
      classArgs:
        #可选项: maximize, minimize
        optimize_mode: maximize
      gpuNum: 0
    assessor:
      codeDir: /nni/assessor
      classFileName: myassessor.py
      className: MyAssessor
      classArgs:
        #choice: maximize, minimize
        optimize_mode: maximize
      gpuNum: 0
    trial:
      command: python3 mnist.py
      codeDir: /nni/mnist
      gpuNum: 0
  • 远程模式

    如果要在远程服务器上运行 Trial 任务,需要增加服务器信息:

    authorName: test
    experimentName: test_experiment
    trialConcurrency: 3
    maxExecDuration: 1h
    maxTrialNum: 10
    #可选项: local, remote, pai, kubeflow
    trainingServicePlatform: remote
    searchSpacePath: /nni/search_space.json
    #可选项: true, false
    useAnnotation: false
    tuner:
      #可选项: TPE, Random, Anneal, Evolution
      builtinTunerName: TPE
      classArgs:
        #可选项: maximize, minimize
        optimize_mode: maximize
      gpuNum: 0
    trial:
      command: python3 mnist.py
      codeDir: /nni/mnist
      gpuNum: 0
    # 如果是本地 Experiment,machineList 可为空。
    machineList:
    
      - ip: 10.10.10.10
        port: 22
        username: test
        passwd: test
      - ip: 10.10.10.11
        port: 22
        username: test
        passwd: test
      - ip: 10.10.10.12
        port: 22
        username: test
        sshKeyPath: /nni/sshkey
        passphrase: qwert
  • pai 模式

    authorName: test
    experimentName: nni_test1
    trialConcurrency: 1
    maxExecDuration:500h
    maxTrialNum: 1
    #可选项: local, remote, pai, kubeflow
    trainingServicePlatform: pai
    searchSpacePath: search_space.json
    #可选项: true, false
    useAnnotation: false
    tuner:
      #可选项: TPE, Random, Anneal, Evolution, BatchTuner
      #SMAC (SMAC 需要使用 nnictl package 单独安装)
      builtinTunerName: TPE
      classArgs:
        #可选项: maximize, minimize
        optimize_mode: maximize
    trial:
      command: python3 main.py
      codeDir: .
      gpuNum: 4
      cpuNum: 2
      memoryMB: 10000
      # 在 OpenPAI 上用来运行 Nni 作业的 docker 映像
      image: msranni/nni:latest
      # 在 OpenPAI 的 hdfs 上存储数据的目录,如:'hdfs://host:port/directory'
      dataDir: hdfs://10.11.12.13:9000/test
      # 在 OpenPAI 的 hdfs 上存储输出的目录,如:'hdfs://host:port/directory'
      outputDir: hdfs://10.11.12.13:9000/test
    paiConfig:
      # OpenPAI 用户名
      userName: test
      # OpenPAI 密码
      passWord: test
      # OpenPAI 服务器 Ip
      host: 10.10.10.10
  • Kubeflow 模式

    使用 NFS 存储。

    authorName: default
    experimentName: example_mni
    trialConcurrency: 1
    maxExecDuration: 1h
    maxTrialNum: 1
    #可选项: local, remote, pai, kubeflow
    trainingServicePlatform: kubeflow
    searchSpacePath: search_space.json
    #可选项: true, false
    useAnnotation: false
    tuner:
      #可选项: TPE, Random, Anneal, Evolution
      builtinTunerName: TPE
      classArgs:
        #可选项: maximize, minimize
        optimize_mode: maximize
    trial:
      codeDir: .
      worker:
        replicas: 1
        command: python3 mnist.py
        gpuNum: 0
        cpuNum: 1
        memoryMB: 8192
        image: msranni/nni:latest
    kubeflowConfig:
      operator: tf-operator
      nfs:
        server: 10.10.10.10
        path: /var/nfs/general

    使用 Azure 存储。

    authorName: default
    experimentName: example_mni
    trialConcurrency: 1
    maxExecDuration: 1h
    maxTrialNum: 1
    #可选项: local, remote, pai, kubeflow
    trainingServicePlatform: kubeflow
    searchSpacePath: search_space.json
    #可选项: true, false
    useAnnotation: false
    #nniManagerIp: 10.10.10.10
    tuner:
      #可选项: TPE, Random, Anneal, Evolution
      builtinTunerName: TPE
      classArgs:
        #可选项: maximize, minimize
        optimize_mode: maximize
    assessor:
      builtinAssessorName: Medianstop
      classArgs:
        optimize_mode: maximize
      gpuNum: 0
    trial:
      codeDir: .
      worker:
        replicas: 1
        command: python3 mnist.py
        gpuNum: 0
        cpuNum: 1
        memoryMB: 4096
        image: msranni/nni:latest
    kubeflowConfig:
      operator: tf-operator
      keyVault:
        vaultName: Contoso-Vault
        name: AzureStorageAccountKey
      azureStorage:
        accountName: storage
        azureShare: share01