在 tao 提供的数据类范例中,每个脚本的第一个步骤都是环境配置( 0. set up env variables and map drives ),包括要求用户提供在 ngc 所生成的密钥,对后面训练的模型进行保护,以及指定要使用的 gpu 数量等等,这几个设定都很直观容易处理,但接下去的环境变量配置部分,就让大部分初学者停滞不前,因为任何一项路径配置错误,都会影响后面工作的正常进行,而每个实验脚本所提供的说明,对初学者来的帮助并不大,很多新手按照其字面解释去进行设定,但总是没法调整到完全正确。
因此我们必须在大家执行实验之前,先以专文将这部分的配置说明清楚,然后提供一个最简单的步骤,让大家用最轻松的方法来进行配置。
本文使用范例的 detectnet_v2.ipynb 做示范,首先看一下第一指令块中的设定内容:
[ ] import os%env key=tlt_encode%env num_gpus=1%env user_experiment_dir=/workspace/tao-experiments/detectnet_v2%env data_download_dir=/workspace/tao-experiments/data# %env notebook_root=~/tao-samples/detectnet_v2os.environ[local_project_dir] = fixmeos.environ[local_data_dir] = os.path.join( os.getenv(local_project_dir, os.getcwd()), data)os.environ[local_experiment_dir] = os.path.join( os.getenv(local_project_dir, os.getcwd()), detectnet_v2)# the sample spec files are present in the same path as the downloaded samples.os.environ[local_specs_dir] = os.path.join( os.getenv(notebook_root, os.getcwd()), specs)%env specs_dir=/workspace/tao-experiments/detectnet_v2/specs
稍微整理一下,除了 key 与 num_gpus 两个变量之外,共有7个与路径有关的变量:
user_experiment_dir
data_download_dir
local_project_dir
local_data_dir
local_experiment_dir
local_specs_dir
specs_dir
其实稍微整理一下就更容易理解,下表就是将这7个变量分为两组,以 “local_” 开头的属于 “容器外” 用途,另外 3 个属于容器内用途。
用途
容器外(主机上)
容器内(沿用tlt的习惯)
项目工作位置
local_project_dir
存放模型训练输出结果
local_experiment_dir
user_experiment_dir
存放数据集的路径
local_data_dir
data_download_dir
配置文件存放路径
local_specs_dir
specs_dir
什么是容器内与容器外?前面提过 tao 用两套独立的 docker 容器,分别为视觉类与对话类提供模型训练功能,并透过 tao 启动器的 cli 指令执行各项任务。
虽然我们所有操作都在容器外的宿主机上,例如在指令终端下达 “tao detectnet_v2 train ...”,或者在 jupyter 交互环境里执行 “!taodetectnet_v2 train ...” 指令,但是 tao 启动器会将这些指令传递到容器,在后台为我们执行对应的任务。
这种处理方式的最大好处是,让不懂 docker 的初学者完全无需理会容器技术,只要专注于 “模型训练” 的重点工作就行,如此就能让 tao 的普及程度更快与更广,这也是 tao 工具的一项非常重要意义。
但为何需要使用两套路径来处理呢?全部都在容器内执行不是更加简单?这里有个最严肃的问题是 “容器的生命周期” ,如果将数据保留在容器内处理的话,一旦容器关闭或销毁时,我们所有实验数据都将付之一炬,这是一项大家都承担不起的风险,因此我们必须将所有的数据存放在容器外面,然后透过路径映射 (mapping) 的方式来处理。
其次就是对于数据整理与文件修改的能力,在容器内操作是相对不方便的。要知道在执行模型训练之前,通常得先下载数据集的压缩文件、移动文件、进行解压缩、修改配置文件等等,这些任务在宿主机上操作是相对轻松的。
好了,当我们清楚 tao 的视觉类模型训练脚本中,存在容器内与容器外两组环境路径的原因之后,接着就来看该如何设置与映射。
我们将前面的列表进行展开,前面 4 个是容器外的变量、后面 3 个是容器内变量:
环境变量
设定值
local_project_dir
需要设置
local_experiment_dir
$local_project_dir/
local_data_dir
$local_project_dir/data
local_specs_dir
/specs
user_experiment_dir
/workspace/tao-experiments/
data_download_dir
/workspace/tao-experiments/data
specs_dir
/workspace/tao-experiments//specs
假如在执行格内的变量按照上表的顺序去排列,事情就会变得非常单纯。
事实上,从头到尾我们只要将 “local_project_dir” 设置为”执行脚本所在目录”,那么后面三个容器外变量就立即建立好对应关系,我们完全不需要做任何处理理会。至于容器内的三个变量,每个脚本的配置规则都是一样,也就是不需要去改变。
把上面的对应关系了解清楚之后,整个状况就变得非常简单,现在回头看看第一个指令块,里面需要输入的变量其实只有以下三个:
%env key=
%env num_gpus=
os.environ[local_project_dir] = os.getcwd()
其他 6 个变量完全不做任何修改,这样就能够顺畅地跑动后面的指令块。
接下去的工作就是执行 “路径映射” 任务,为容器内外的路径建立对应的关系。几乎所有训练脚本都采用下面的映射方式:
[ ] # define the dictionary with the mapped drivesdrive_map = { mounts: [ # mapping the data directory { source: os.environ[local_project_dir], destination: /workspace/tao-experiments }, # mapping the specs directory. { source: os.environ[local_specs_dir], destination: os.environ[specs_dir] }, ]}
执行这个路径映射的指令块之后,会将这些值写入 “~/.tao_mounts.json” 文件里面,这是 tao 启动器每次调用容器时都需要参考的配置文件,但是这个文件是 “唯一” 的,也就是同一时间只会存在一组容器内外的路径映射关系,这表示系统不能同时执行两个以上的模型训练脚本,这点也请务必牢记。
紧跟着的 “1.install the tao launcher” 步骤可以直接跳过,因为我们在前面已经带着大家安装好 tao 启动器,这里顶多执行 “!taoinfo” 指令,确认一下是否回应正确讯息。
现在就可以开始进行 tao 所提供的各种神经网络的模型训练脚本。
Wi-Fi 6传输范围广速度快,将成为新一代无线认证标准
固态电解质中锂驱动应力变化监测
欧盟出台政策围堵中国 半导体发展孤立无援
我国锂电行业机器视觉赛道的四种趋势
5G+VR技术推进智慧医疗加速落地
NVIDIA Jetson Nano 2GB:视觉类脚本的环境配置与映射
vivo X23将采用美人尖式的全面屏,四周边框极窄
短波红外在工业中的应用有哪些?
LPWAN处于黄金年代 NB-IoT将获得高增长率
数字电路中逻辑门的电路符号图
智能化纸张在线检测设备的工作原理是怎样的
物联网怎样为智能家居助力
工业RFID读写器为何如此热门,它的优势是什么
能耗管理系统在商场中的应用
ADC四种常见单环多阶调制器结构
英码科技参与起草制定边缘计算标准 积极推动产业规范化发展
资本追逐的14个人工智能细分领域详解
单相的220V如何变成380V的三相电
MAXHUB会议平板如何助力前途汽车走向更好的“前途”
人群预防系统利用智能杆打造更安全的海滩