在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_v2 os.environ["LOCAL_PROJECT_DIR"] = FIXME os.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个与路径有关的变量:
其实稍微整理一下就更容易理解,下表就是将这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交互环境里执行“!tao detectnet_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” 设置为”执行脚本所在目录”,那么后面三个容器外变量就立即建立好对应关系,我们完全不需要做任何处理理会。至于容器内的三个变量,每个脚本的配置规则都是一样,也就是不需要去改变。
把上面的对应关系了解清楚之后,整个状况就变得非常简单,现在回头看看第一个指令块,里面需要输入的变量其实只有以下三个:
其他6个变量完全不做任何修改,这样就能够顺畅地跑动后面的指令块。
接下去的工作就是执行“路径映射”任务,为容器内外的路径建立对应的关系。几乎所有训练脚本都采用下面的映射方式:
[ ] |
# Define the dictionary with the mapped drives drive_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启动器,这里顶多执行“!tao info”指令,确认一下是否回应正确讯息。
现在就可以开始进行TAO所提供的各种神经网络的模型训练脚本。【完】
好文章,需要你的鼓励
谷歌DeepMind发布AlphaEarth Foundations AI模型,能处理每日数TB卫星数据追踪地表变化。该模型如"虚拟卫星"般将全球陆地和沿海水域映射为数字表示,帮助科学家监测食品安全、森林砍伐、城市扩张等关键问题。模型整合光学卫星图像、雷达、激光测绘等数据源,以10×10米精度追踪变化,错误率比其他模型低24%。
阿联酋穆罕默德·本·扎耶德人工智能大学研究团队开发出轻量级语音合成系统LLMVoX,仅用3000万参数就能让任何大语言模型获得流式语音输出能力。该系统实现475毫秒超低延迟,词错误率仅3.7%,支持多语言扩展,可与视觉语言模型集成,为AI语音交互提供了"即插即用"的革命性解决方案。
ChatGPT虽然是目前最受欢迎的AI聊天机器人,但它并非万能。文章指出11个不应该使用ChatGPT的场景:诊断健康问题、处理心理健康、紧急安全决策、个人财务税务规划、处理机密数据、违法行为、学术作弊、监控实时信息、赌博预测、起草法律文件以及创作艺术。AI可能产生错误信息、缺乏实时数据更新,在高风险场景下可能造成严重后果。用户应了解其局限性,在关键决策时寻求专业帮助。
清华大学团队开发出革命性人形机器人系统Being-0,具备类人思维能力。该系统采用创新的"三层大脑"架构:顶层基础模型负责理解指令和制定策略,中间层连接器模块负责将计划转化为具体动作,底层技能库负责执行各种操作。机器人能够理解自然语言,自主规划复杂任务如制作咖啡,并在动态环境中灵活调整策略,在长期任务中达到84.4%的成功率。