最佳实践
简介
本章节介绍开发环境使用过程中总结的使用经验和最佳实践。
实例规格
开发环境提供了多种实例规格(CPU/内存/GPU),以满足用户不同的需求。
- 通过WEB控制台创建开发环境时,我们已经为您提供了最佳的CPU/内存/GPU配比。当使用命令行工具时,请尽量按照CPU:内存=1:2, 1:4或者1:8的比例。
- 开发环境创建后,不可以改变实例规格。建议创建开发环境时,预估需要的硬件资源。CPU和GPU不足的情况,通常不会产生严重后果,内存不足会导致实例崩溃重启。
- 一个开发环境实例最多可以使用4个GPU。
存储
开发环境内现在提供了两种文件存储:临时文件存储和基于FDS FUSE的持久化存储。两种类型的存储各有优缺点:
- 开发环境运行在Docker容器中,所有的默认文件会存储在容器的文件系统中。优点是文件读写速度快。缺点是文件随着开发环境的关闭会自动销毁,或者在容器重启时丢失。
挂载到开发环境的FDS FUSE文件存储,所有文件会保存在远端FDS中。优点是文件持久化保存,不会因开发环境故障发生丢失,可以支持多机同时读写。缺点是速度相对本地文件存储较慢,尤其是对频繁更改的文件性能较差。
因此,建议系统中创建的临时文件,存储在系统默认路径下;需要长久保存的模型和数据,存储在FDS FUSE目录中。对使用FDS FUSE文件系统的用户,可以从以下几方面提高性能:使用相同机房的开发环境和FDS。相同机房的开发环境使用FDS FUSE的网络性能,高于跨机房访问的网络性能。例如在C3机房创建的开发环境,优先推荐挂载C3机房的FDS bucket。
- 合并多次写操作到一次,能显著提高文件读写速度。用户每次对文件执行Flush操作后,FDS FUSE都会重新上传整个文件。因此合并多次写操作成一次,能减少文件重传次数。
- 避免挂载的FDS bucket中存储超过10000个文件。随着文件数量的增长,FDS FUSE执行ls等遍历命令的执行时间成线性增长。建议大量零散的小文件,进行文件合并,或者存储到多个bucket中。
网络和安全
创建开发环境,配置网络和防火墙规则时
- 建议开启SSH(22)连接,从而连接到开发环境内部。
- 最少开放原则。只开放需要访问的端口和IP白名单,不要暴露其他端口给公网
- 认证授权。开发环境的网络端口和防火墙规则只提供虚拟防火墙功能,建议环境内的服务开启认证授权,增强安全性。
资源管理
尽快关闭不需要的开发环境,释放quota资源。
备份和恢复
原文: http://docs.api.xiaomi.com/cloud-ml/devenv/05_dev_best_practice.html