本文为作者作为 学员+助教 参与 2023 年初 OpenMMLab AI 实战营的经验贴,不能确保适用于未来的实战营,也难免有片面之处,希望发现问题的小伙伴可以在评论区中积极讨论~

💡让美丽周边奖品陪伴一段成长

  • 💰AI 实战营真的提供了非常丰富的激励
实战营成就激励
优秀学员证书、周边、OpenMMLab 内推机会
优秀助教证书、进阶周边、MMS(布道师)社区最高荣誉直推通道、社区特邀专访、OpenMMLab 内推机会
优秀班长类似“优秀助教”
  • 🛠️也带我探索了很多有价值的技术和工具

image.png

  • 📝学会了项目的维护流程

image.png

  • 🤝学会向开源社区提交 pr(pull request)和文章

image.png

  • 🎶学会……

📕笔记&经验总结

下面我来总结实战营中学习到的技术和知识,分为 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}
  • 执行得到端口地址,复制到浏览器打开即可查看训练可视化内容
    image.png
    image.png
  • 关闭端口占用,只需短/长按 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.orghttps://hub.fastgit.org ,但基本只能在下载的时候用
    • 使用其他 CDN 服务,对Github的静态文件进行加速
    • 使用 Gitee 或其他国内的代码托管平台
    • 修改Hosts文件,将Github的域名和IP地址绑定,从而避免DNS解析的延迟或干扰

🙋创建自己的项目

  • 首先,在你的 Github 创建新的仓库,注意命名的格式一般是 xxx-yyy 或者 xxxYyy,名字要多用简写,要概括仓库的功能

🍻准备上传

  • 然后将你的仓库克隆到本地,如果你嫌命令行中更换文件目录麻烦,也可以下载下来解压缩,自己放到合适的文件路径
  • 把本地的项目完整复制到克隆下来的仓库文件夹,适当忽略一些和代码库与功能无关的文件或文件夹
  • 然后在仓库文件夹的首页添加一个 md 文件,命名为 README.md,里面遵循 Markdown 语法,Github 仓库首页会自动展示这个文档在你的代码库下面。一个优秀的 README 需要装点门面,比如提供其他相关页面的跳转链接、向访客介绍仓库的概述、引导访客配置环境并运行必要的功能,也可以提供其他更多的详细信息。注意图文结合,代码块活用

image.png

👌提交更改

  • 使用 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}
      image-20230216165114791
    • 参见{SeeAlso}
      image-20230216165101408
    • 警告{Warning}
      image-20230216165130496

😉最后

  • 大家都来积极加入 MMLab 实战营吧,祝小伙伴们都能从中收获自己的成长和乐趣!

本文参与了SegmentFault 思否写作挑战赛,欢迎正在阅读的你也加入。


布鲁瓦丝
1 声望0 粉丝

引用和评论

0 条评论