本文为作者作为 学员+助教 参与 2023 年初 OpenMMLab AI 实战营的经验贴,不能确保适用于未来的实战营,也难免有片面之处,希望发现问题的小伙伴可以在评论区中积极讨论~
💡让美丽周边奖品陪伴一段成长
- 💰AI 实战营真的提供了非常丰富的激励
实战营成就 | 激励 |
---|---|
优秀学员 | 证书、周边、OpenMMLab 内推机会 |
优秀助教 | 证书、进阶周边、MMS(布道师)社区最高荣誉直推通道、社区特邀专访、OpenMMLab 内推机会 |
优秀班长 | 类似“优秀助教” |
- 🛠️也带我探索了很多有价值的技术和工具
- 📝学会了项目的维护流程
- 🤝学会向开源社区提交 pr(pull request)和文章
- 🎶学会……
📕笔记&经验总结
下面我来总结实战营中学习到的技术和知识,分为 4 个方面:常用命令、常用工具、GitHub 作业维护、OpenMMLab 贡献指南
💻常用命令
ANACONDA 常用命令与一些解决方案
创建虚拟环境
conda create -n your_env_name python=X.X
更新 conda(慎用!!!,新 conda 可能用不了)
conda updata conda
查看虚拟环境菜单和环境内已载入库
conda env list
conda list
激活虚拟环境
Conda activate your_env_name
如果遇到 conda 安装频繁报错,使用如下语句:
conda clean -i
如果不幸要删除虚拟环境
conda remove -n your_env_name --all
PyTorch 推荐安装命令
pip install torch==1.13.1+cu117 torchvision==0.14.1+cu117 -f https://download.pytorch.org/whl/cu117/torch_stable.html
我常用的 pip 镜像
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple # 清华
pip install -i https://pypi.douban.com/simple # 豆瓣(推荐)
安装其他项目的 requirements.txt
pip install -r requirements.txt
📊TENSORBOARD 可视化
- 首先学习以下 tensorboardX 怎么用。在 OpenMMLab 中,只需找到 configs/_base_/default_runtime.py 中的如下代码,解除
dict(type='TensorboardLoggerHook')
注释部分即可开启 tensorboard 记录器
log_config = dict(
interval=50,
hooks=[
dict(type='TextLoggerHook', by_epoch=False),
# dict(type='TensorboardLoggerHook')
# dict(type='PaviLoggerHook') # for internal services
])
- 如果遇到环境问题,则按照提示配置 tensorboard 环境即可
一般训练代码运行之后会同时生成 tensorboardX 的日志文件。这时复制日志文件所在文件夹路径,打开 Anaconda 命令行,切换环境至 torch,输入图中语句为日志文件夹创建 tensorboardX 默认的本地端口
tensorboard --logdir PATH {log_file_abs_path}
- 执行得到端口地址,复制到浏览器打开即可查看训练可视化内容
- 关闭端口占用,只需短/长按 CTRL + C
🕹️常用工具
⌨️代码编辑器
编写代码或配置文件的时候,主要考虑怎么连接项目环境、是否方便代码编写和调试、是否方便连接远程服务器(MMLab 提供免费云 GPU 额度)
PyCharm 专业版或企业版
- 只需要 Anaconda 配置好 Python 环境,并安装好环境依赖,选择环境内部的 Python 解释器路径即可。同时,PyCharm 会自动检测项目中缺失的依赖库,并提供软件内的一键安装(就是很容易遇到国内网络环境的问题)
- PyCharm 提供了非常智能的代码提示和辅助功能,属于忘记语法也能帮你写对的那种。辅助功能如修改原始变量、函数或其他命名时,自动修改调用名、鼠标点击快速跳转到定义等都很实用,编写 Python 项目非常舒服。但是得吐槽一下它的 Typo 识别经常把代码搞得花花的很难看,你想让他忽略还得手动到设置里找
- 最大的问题是,如果你使用的服务器对路径约束比较多,并且只提供有限的系统环境的,那PyCharm 不能给你无缝的远程服务器使用体验。因为远程 Python 环境的配置和选择很麻烦,如果解决不了远程环境的问题就无法直接调试
项目环境连接 | 代码编写与调试 | 连接远程服务器 |
---|---|---|
⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ |
VS Code
- VS Code 选择环境的过程更简单,它会直接识别 Anaconda 的已有环境,你只需要在状态栏选择即可。但是如果缺失依赖还是需要到终端自行安装
- VS Code 的插件社区比 PyCharm 要发达很多,你可以安装各种功能的插件来接近完整 IDE 的效果。但遗憾的是,我尝试过在记不清楚基本语法的情况下借助 intellisense 搭建一个 PyTorch 下的 ResNet,结果 VS Code 没检查出我继承类和编写函数时的语法错误,导致运行脚本总是报错。最后,用 PyCharm 打开项目成功锁定错误代码并做好了修复
- VS Code 通过 Remote SSH 插件可以很方便得连接并管理云服务器,我可以无缝拖入和导出文件,也可以方便地调试远端脚本。很多小伙伴不知道 VS Code 连接服务器时候应该怎么充分利用其带来的便利,那么可以看看我的一期演示视频(指路)
项目环境连接 | 代码编写与调试 | 连接远程服务器 |
---|---|---|
⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ |
📕Obsidian 技术笔记
- 众所周知,做技术探索的时候最关键的解决步骤总是怕忘记,到需要复用的时候不知道从何找起。所以方便复制、随时查看、跨平台同步、界面美观的电子技术笔记就非常重要。在实战营中帮助我最多的时 Obsidian。
- Markdown 语法:首先,Obsidian 官方默认支持的就是 Markdown 语法。花里胡哨的 OneNote 只能在 Office365 中共享文章样式,但是 Markdown 作为开源社区 Github 最重要的、自动化配置样式的、为技术人员熟知的文档技术能很好地实现<u>跨平台、高度一致、对外兼容</u>
- 完完整整的同步机制:你不仅可以借助云盘同步你的 MD 文章仓库,还可以同步你的设置、插件。这样无论你切换到哪个设备,Obsidian 都能用一致的界面主题、文本样式、偏好设置向你展现你的文章。此外,任意一个设备的更改都会快速同步到其他设备上
❤️GITHUB 作业维护
MMLab 实战营的作业成果都是要求在 Github 上维护的,但是大部分学员会遇到网络环境的访问问题,或者不理解 Github 的作用,也不清楚怎么利用 Github 维护一个项目
😂网络环境问题
一些合法合规的解决思路:
- 使用 Github 的镜像网站: https://github.com.cnpmjs.org 或 https://hub.fastgit.org ,但基本只能在下载的时候用
- 使用其他 CDN 服务,对Github的静态文件进行加速
- 使用 Gitee 或其他国内的代码托管平台
- 修改Hosts文件,将Github的域名和IP地址绑定,从而避免DNS解析的延迟或干扰
🙋创建自己的项目
- 首先,在你的 Github 创建新的仓库,注意命名的格式一般是 xxx-yyy 或者 xxxYyy,名字要多用简写,要概括仓库的功能
🍻准备上传
- 然后将你的仓库克隆到本地,如果你嫌命令行中更换文件目录麻烦,也可以下载下来解压缩,自己放到合适的文件路径
- 把本地的项目完整复制到克隆下来的仓库文件夹,适当忽略一些和代码库与功能无关的文件或文件夹
- 然后在仓库文件夹的首页添加一个 md 文件,命名为 README.md,里面遵循 Markdown 语法,Github 仓库首页会自动展示这个文档在你的代码库下面。一个优秀的 README 需要装点门面,比如提供其他相关页面的跳转链接、向访客介绍仓库的概述、引导访客配置环境并运行必要的功能,也可以提供其他更多的详细信息。注意图文结合,代码块活用
👌提交更改
- 使用
git status
检查当前更改 - 使用
git add *
将所有更改添加到上传列表 - 使用
git commit
提交当前更改,注意在 -m 后面用字符串写此次提交的标题
git commit -m "first commit"
💖OpenMMLab 贡献指南
ref:
官方贡献指南:贡献代码
官方代码规范:代码规范
📃PR 描述规范
标题
- sample: [Docs] Refine contribute.md
在开头使用英文括号描述修改的对象,常见修改对象有
对象 描述 Docs 官方文档更新 可以是refine也可以补充 Feature 新功能 新功能support对xxx的支持 Fix 修复bug WIP 先提出来 等待开发完成 暂时不用review
🌟REFINE DOCs 的一些效果
代码快 to 提示框
基于代码快的语法,通过特殊的标注实现代码快到提示框的转换
- 注解{Note}
- 参见{SeeAlso}
- 警告{Warning}
- 注解{Note}
😉最后
- 大家都来积极加入 MMLab 实战营吧,祝小伙伴们都能从中收获自己的成长和乐趣!
本文参与了SegmentFault 思否写作挑战赛,欢迎正在阅读的你也加入。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。