无图预警,多字预警。
阅读时请保持清醒,有利于发现谬误。
Sky Hackthon 比赛是由 Nvidia 中国开发者社区举办的,面向国内高校学生的关于算法模型应用比赛,比赛期间,同学将用两周时间实现一个官方指定主题的算法功能,并将其部署到指定的云端平台上。
比赛主题一般是与生活息息相关内容,例如第六届比赛是一个 AI大白,第七届比赛是一个垃圾检测网站。
我认为 Sky Hackthon 是一个团队学习型比赛,比赛期间全程由导师尽心指导,凡有所问,必有所答,如果团队间尽力合作,虚心求教,最低能达成完赛要求,最高直接领奖!
作为一个学习型比赛,可以向导师学习、向其他团队学习、团队间学习等等,可以说,从完全不会的 0 基础小白,到基本熟悉 Linux 操作,学会算法模型训练与部署,就缺这么一场竞赛。
本人参加第六届、第七届Sky Hackthon比赛均获得第一名,对 Sky Hackthon 比赛了解还算足够,考虑到还欠Lady一篇博客,以及还有最新的打卡活动,我决定在隔离期间写一个系列片,为 Sky Hackthon 后续的比赛添砖加瓦 (增加难度)。
本系列共分五篇,分别是:
最后,不代表读了,你就一定能拿到好成绩,但是我希望这个系列,让你尽可能的少走弯路错路,最后比赛的成功,你依然需要付出大量时间、精力、不耻下问和团队彼此的竭力合作。
最后的最后,这个比赛的重点,并不在于最后的名次,而是相较于比赛前,你学到了、了解到了什么更有用的知识,不必为了名次与奖励而太过紧张与焦虑。
回到小学做一个满分的卷子并不能被叫做一场成功的考试
但是参加未曾尝试过的比赛并且完赛,我觉得可以称之为成功的参赛。
基础篇共有以下内容:
基础不牢,地动山摇,算法比赛嘛,起码得有一定的代码基础,这个代码基础,主要是指代码的阅读能力,小部分的代码书写能力即可,但是这篇博客都不会讲,如有需要,可以查阅比如 廖雪峰等的网站,花半小时到一小时了解基本写法就 OK,保证看到代码不会懵逼, 剩下的可以交给实战。
在 Python 基础部分,重点讲有两个,一个是虚拟环境,另外一个是环境变量。
关于虚拟环境:
代码的编译与运行需要指定的环境,比如 Java 需要对应版本的 JDK、JRE,JS代码用浏览器可以运行一样, Python 也有自己的环境,所以想要运行一个Python 程序,就首先应该确定他的 Python版本、所运行的包版本。
但是存在一个问题,如何管理不同程序之间的 版本 呢?
难道每次使用不同的程序都需要重新进行卸载和安装吗? 当然不必。
Python 自3.3之后,提供了一个新的特性 虚拟环境, 顾名思义,这是一个完全虚拟的环境,我们可以自行指定其 Python 版本,指定环境内的包版本。
# 创建一个虚拟环境 名为 myVenv
python3 -m venv myVenv
# 激活(或者理解成切换到)指定的虚拟环境
source myVenv/bin/active
而之后,也产生了非常多的虚拟环境管理器,比如最常用的: Anaconda。
通过 Conda,我们可以创建一个独立的虚拟环境,他与实际的环境完全隔离,如果出现任何问题,我们都可以卸载环境,重新再次安装。
# 创建虚拟环境,名为 myVenv 并指定虚拟环境版本为3.6.9
conda create -n myVenv python==3.6.9
# 激活虚拟环境
conda activate myVenv
# 退出虚拟环境
conda deactivate myVenv
管理好虚拟环境,就能正确的管理你的 Python 代码,在进行相关操作时候(涉及环境变化),就能理解操作的含义。
除虚拟环境之外的另外一个重点,则是,环境变量:
在 Python 中。你可以使用 os
包进行环境变脸的设置,比如:
# 设置一个名字为 Test, 值为 testValue 的环境变量
os.environ["Test"]="testValue"
然后,使用 os
包重新调用对应的变量:
print(os.environ['Test'])
注意,这一环境变量并非仅存于虚拟环境中,而是设置于系统之中,通过设置环境变量,我们可以很轻易的调用一些变量,而不必关注变量此刻的值。
特别注意:
不管之前是否有 Windows 系统操作的习惯, Sky Hackthon 比赛最终的部署环境说位于 Jetson Nano 或者 NX 上的,默认系统应该是 Ubuntu 18.04,也就是没有 Linux 的操作基础,注定只能看着干瞪眼。
所以 Linux 基础,主要讲解一些基础的概念和指令。
概念相关:
/home/xxx
其中 xxx
指登陆的这个用户名,比如 Ubuntu 默认用户是 Ubuntu,可以使用 ~
进行指代。如果是 root
用户,则家目录为 /root
。/
,这是 Linux 系统中最大的文件夹,所有的文件都在这个文件夹下面。.
来表示。..
来表示。root
用户,来完成一些普通用户无法完成的指令。指令相关(详细的使用介绍我建议再自行百度一次):
cd
::进入指定的路径,例如:·cd /user
,进入根目录下 user
文件夹。ls
:展示当前文件夹下全部文件夹信息sudo
::提权后执行命令,例如 sudo run.sh
,指提权后使用 root 的权限执行 run.sh
的脚本chmod
:修改权限,修改执行一个文件所需要的权限,具体请百度详情,通常搭配 sudo
使用。bash
: 执行脚本,需要拥有脚本的执行权限才可执行,但是是在 子Shell 内执行的。export
::设置环境变量,通常需要搭配 source
指令才能生效。source
:执行脚本,但是位于当前 Shell 中执行,通常是执行 source profile
使得设置的环境变量生效。weget
:执行一个网络的 get
请求,默认情况下会直接下载请求来的网络文件。curl
: 是一个网络下载工具,默认情况会将内容展示在屏幕上,但是通过参数也可也进行下载操作。kill
: 关闭进程,通常搭配参数 -9 或者 -15 进行程序关闭。rm
:删除指定的文件,建议详细百度该命令,避免犯错,经典笑话之一:rm -rf /*
cp
:移动指定文件,通常建议使用该命令代替 rm
命令。|
:被称为通道命令,简单的来讲,是讲通道前的命令得到的输出,作为下一个命令的输入去执行。注意:这里有很多命令还没有提到,遇到需求请自行结合百度。
特殊注意:
sudo
,除非机器是临时使用,或者是无任何安全需求,降低使用 sudo
直接执行命令的习惯。改为 sudo
搭配 chmod
进行权限修改,然后再执行脚本。chmod
,权限并非只有 777 一个,请合理的设置权限,保证当前用户可以执行足以。kill
命令不是只有 -9 一个选择,除非确定无碍,否则尽量不要使用 -9, 使用 -15更好。具体区别自行百度。rm
指令,尽可能多的只用 mv
指令,以免在某些操作之后难以进行回档。磁盘的价格,往往低于丢失文件造成的损失。NGC:Nintendo GameCube,任天堂家用游戏机,当然是不可能的, 其实全称应该是 Nvidia GPU Cloud,根据其官方页面介绍:
NVIDIA NGC™ 提供一系列完全托管的云服务,包括用于 NLU 和语音 AI 解决方案的 NeMo LLM、BioNemo 和 Riva Studio。AI 从业者可以利用 NVIDIA Base Command 进行模型训练,利用 NVIDIA Fleet Command 进行模型管理,并利用 NGC 专用注册表安全共享专有 AI 软件。此外,NGC 还拥有一个 GPU 优化的 AI 软件、SDK 和 Jupyter Notebook 的目录,可帮助加速 AI 工作流,并通过 NVIDIA AI Enterprise 提供支持。
由于比赛会使用 Nemo、Tao 等工具,所以我们需要预先在这里进行注册账号,注册完账号后,可以进行模型下载等操作。
具体操作内容,可以看赛前发放的 黑客松知识图谱,完全够用。
具体的安装过程,其实在 黑客松知识图谱内均有讲解,这里不会过多叙述,这里更偏向于,如何准备一个可以用以训练的环境。
主要分为三个部分:
根据我所了解的情况,我以大家拥有的硬件情况分为以下几类:
大家应该在赛前对硬件环境有一定的准备,并且尽量完成环境的安装,保证开赛后可以及时的投入到比赛过程中去。
这个放在这里单独提出,其实主要是想讲两个问题,第一个是云 GPU 带来的容器使用问题,第二个则是容器的路径问题。
由于 TAO 会使用 docker,所以在某种意义上,docker 是必不可少的,而 云 GPU 服务商提供给用户的,往往就已经是一个 docker,所以并不一定能在内部安装 docker,这样的话在云 GPU 选择上,应该慎重。建议购买前找客服询问清楚。
第二个问题,容器可以简单理解成一个虚拟机,它可以像虚拟机一样,将外部宿主机的某个文件夹挂载到容器的内部,这样修改外部文件,容器内部的文件也会随时更改。这时候,一定要区分好宿主机路径和容器内路径。
队友是必不可少的一环,因为训练会分为2-3个模型,还有额外的任务,五个人必须要分工合作,训练模型包括了数据准备、清理、标注,训练和部署也需要反复测试验证,所以多一个人少一个人工作量并不相同,如果有人没干活,那就得有人更全心的投入。
当然,这并不是说我们应该责怪队友不付出,而是讲我们应该时刻关注彼此的工作进度,加强团队分工和团队沟通,相互帮忙完成任务,避免个人突发情况不能持续投入时导致的进度问题,这能大大的提高比赛完成的成功率。
Sky Hackthon 是一个非常好的学习比赛,适合大家以赛促学,基础篇的内容上偏向通用,对于知识图谱提及的内容也没有再次赘述,希望可以帮助大家完成赛前的准备,以一个完美的状态进入比赛中。
当然你就算不准备,只要比赛的时候认真努力,完赛还是没问题的,导师们真的会很耐心的指导大家,解决大家的问题。