Leinao / GPUCluster

用于讨论在使用https://bitahub.ustc.edu.cn 过程中碰到的问题
MIT License
2 stars 0 forks source link

常见问题整理 #2

Open xwzheng1020 opened 2 years ago

xwzheng1020 commented 2 years ago

1、注册账号

必须使用机构邮件,即qq.com, gmail.com等不能反映所在机构的邮箱,都将无法使用平台算力。

2、为什么需要审核?

实名制。

3、帮助文档在哪?

https://www.bitahub.com/help/

4、平台有哪些计算能力?

以GPU为主,包括V100、3090、Titanxp、1080ti,每张卡配套一定比例的CPU核心和内存,具体在提交任务页面上有显示。

当某一卡型资源紧张时,新提交任务将进入排队等待状态。可以通过 https://www.bitahub.com/resources 查看当前时刻的资源情况。多卡任务也可能因为资源碎片无法满足(如剩余8卡,但分布在4台机器上,此时8卡任务将进入排队),查看某卡型的具体情况:https://www.bitahub.com/resources/teslav100 (可将teslav100替换为其他型号)

5、每个用户可以使用多少存储?

1TiB。

对存储可能不足的用户有以下改善方式: (1)在减少文件数量的前提下,可以对空间大小进行调整,可以在1TiB(包括项目200GiB和数据集800GiB)、2TiB、4TiB三种规格中进行选择(发邮件,默认1TiB),相应地文件数量对应为100万、50万、25万。项目和数据集目录按2:8分配。 (2)限安徽地区的用户,可以发邮件购买额外的存储空间(仅限大小,文件数量不可额外购买)。每GiB每月按0.25元计。超过10TiB的部分,费用加收50%。可随时退订,剩余费用退还到算力账户。 (3)数据集可以发邮件申请转为公开数据集,由运维账户接管,接管之后不算个人配额 (4)鼓励课题组之间共享数据集、模型,平台支持数据集、模型定向地共享给特定用户 (5)以上发邮件指 bitahub@bitahub.com,凡存储配额的处理都默认有1个工作日的延迟。

个人存储使用量可以在个人中心查询。

6、为什么要限制文件数量?

太多小文件会拖慢整体性能,只能用户自行对小文件聚合,如HDF5、Tfrecords等。也建议用户在访问数据时使用多线程。集群使用的存储是共享的分布式存储,擅长于应对多线程并发的聚合读写(压测可以到16GB/s,全体用户共享),单线程的IOPS对比本地的ssd没有优势。

7、使用平台需要哪些前置条件?

对linux系统比较熟悉,能编写启动脚本;对Docker有一定了解,尤其是平台提供的软件环境(如深度学习框架)不符合要求时,需要自定义Docker镜像。

8、怎么计费?

任务排队使用计算资源,按时长收费。见帮助文档,或网页提交任务时的说明。

9、可以部署在线服务吗?

不支持。原因:(1)卡类型大部分不适合;(2)没有网络虚拟化功能;(3)不想开放太多的公网端口,现在只在调试节点对每个调试任务开放了一个ssh端口,而且每个调试任务只能使用3小时。

10、支持多机多卡训练吗?

支持。需要自行处理通信问题。平台的网络是100Gbps infiniband,但使用的是ipoib,没有RDMA。

11、除了上传Dockerfile有哪些生成Docker镜像的方法?

使用者本地可以用docker commit的方式将容器转化为镜像。但平台上没有开发这个功能,只能用Dockerfile。

12、观察到有奇怪现象:在调试时能看到代码文件(/code),项目代码中也可见,但运行任务时,却看不见代码了。什么机制会导致该现象?

很可能是代码中有.gitignore,并且忽略了部分文件名或文件类型。平台对于调试任务是将项目代码直接挂载到容器中,并且给用户修改权限;而运行任务时,会增加git push和git pull的操作(在后台运行,用户不可见),此时会将这部分文件忽略。

解决方法:修改或删除.gitignore文件

13、平台除了GPU服务器外,有专门的CPU计算服务器吗?

没有。如果您的计算只需要CPU,那传统的超算资源可能更适合。如,科大超算中心:https://scc.ustc.edu.cn/

14、怎么上传超过500MB的数据集?

小数据集可以通过网页直接上传,但超过500MB的则不支持,而是使用下列方法:

ftp://202.38.95.226:10011 用户名:ftpuser 密码:** 下载ftp客户端(最好支持断点续传)并上传文件后,发送邮件到datasets@leinao.ai,在邮件中注明:平台注册邮箱、已上传到ftp的文件名称、希望在平台显示的数据集名称、提供数据结构以便验证文件的完整性。上传数据可以不压缩直接上传到ftp上传数据集。

通过ftp导入的数据集,将不再接收大量小文件形式的数据集,请自行使用h5、lmdb、tfrecords等格式对数据进行聚合。判断标准:数据集大小>1GB && 平均文件大小 <1MB,则会被拒绝导入。

数据集的处理默认有一个工作日的延迟。

15、数据集、模型超过网页传输大小的,是否只能通过ftp然后由管理员操作?

这不是唯一的方式。还有另一种: (1)在平台上创建空数据集/模型 (2)启动ssh任务,同时要引用该数据集/模型 (3)因为个人私有数据集/模型是可以写入的,所以此时可以使用scp拷贝来变更数据集/模型

这种方式的弊端是ssh任务3个小时就断开。但如果会使用支持断点续传的工具(如rsync),也还可以。

16、ftp是公开可见的,我上传的数据并不想让其他人看到,能申请私有账号吗?

能(但尽量少申请),发送邮件到datasets@leinao.ai。同样默认只在工作日处理。

17、使用pytorch中预训练的模型(torchvision.models)时,需要去网站上下载模型参数,有时快有时慢,为什么?有解决方案吗?

当使用如 torchvision.models.resnet18(pretrained=True)这样的语句定义模型时,会从pytorch网站下载预训练后的模型参数,如:https://download.pytorch.org/models/resnet18-5c106cde.pth ,这个网址有时又会被解析到AWS的S3存储上,有概率下载很慢或不成功。这个下载后的文件会被缓存到<hub_dir>/checkpoints目录中,如果此前已经成功下载过了,可以直接使用。

这里的hub_dir默认值是/root/.cache/torch/hub,你可以使用函数torch.hub.get_dir()获取该值,也可以通过torch.hub.set_dir(your_path)来设置。torch.hub.get_dir()在计算值时会查看是否有环境变量$TORCH_HOME,若存在则会使用。

在平台上使用不便,源自于默认的hub_dir无法持久化保持数据,需要反复下载。解决方法如下:在平台上创建一个私有模型或数据集,并在任务启动时挂载,假设它的目录是/model/bitahub/torch_hub_cache,将其他环境中已经缓存后的内容上传到这个目录中。然后在平台上启动任务时添加export TORCH_HOME=/model/bitahub/torch_hub_cache,此时你调用torch.hub.get_dir()将返回/model/bitahub/torch_hub_cache/hub,如此则使用的是模型目录,可避免重复下载。

18、为什么有时会显示”提交失败“,怎么应对?

可能原因与应对: (1)代码超过200MB,建议代码中的数据集和模型文件单独维护,如果代码部分就是超过了200M,:(,那只能把其中一部分放到数据集里面。 (2)包含了.git文件夹(一般使用git clone的项目会包含),请删除后再上传,已经上传的可以在网页端删除 (3)项目目录超出配额。在个人中心中,查看存储使用情况,文件数量或大小,都可能引起超额。需对应删除项目或任务,释放新的空间才可再提交。注意,删除是非即时的,一般在30分钟内完成。 (4)另一个可能原因是项目版本控制被锁(一般是前一次操作被意外中断引起),须后台管理员删锁。您需要:提供项目名称和用户邮箱。或者,直接创建新的项目。这个情况很少见。 以上4种情况的表现是提交失败会很快返回。 (5)如果是等待长时间后(20分钟)再返回提交失败,并伴随着文件中心刷新慢或直接不刷新(即网页端看不到代码、模型和output)则是文件服务故障,管理员会及时排查该故障。这种情况也比较少见。 除了提交失败,还有一种特殊情形需要讨论: (6)前期运行时,已经有任务正常运行,后期又额外地往项目代码中拷贝进了.git文件夹,并重新提交了任务,此时,版本管理信息将被破坏,造成任务相关的代码在网页端不可见(不影响已运行任务),只剩项目代码可见。这种情况无法恢复,请重建项目。

19、项目的存储空间显示不足了,哪些会占用它?

项目空间占用来自两部分:(1)代码以及代码更改过程中git自动记录的开销(因代码有大小限制,一般不会太大),这部分是所有任务共享的;(2)计算任务的output,根据程序运行过程写入的内容而定,这部分是根据每个任务而不同。 删除某个任务,其伴随的/output也会删除,即(2)这部分的空间会被释放。而(1)这部分的空间只有删除项目时会释放。

20、使用jupyter进行调试时,启动其中的terminal,但没有tab补全,有什么办法?

启动terminal默认使用的shell是/bin/sh,没有tab补全支持。直接运行bash命令,切换shell后可以支持。

21、数据存放时是Float16的格式,计算时则是Float32,有什么性能优化上的建议?

出于节省存储空间等方面的考虑,有些数据集会选择将浮点数存放为Float16,当这些数据被加载并参与运算时,如果需要转换为Float32,建议将这部分放在GPU上进行。因为:(1)看似只是一个精度转换,但需要访存和计算,如果数据量特别大,会造成CPU的负载剧增;(2)这种简单的计算,GPU可以很好地并行加速,性能优化特别明显,而且GPU显存比内存性能更优;(3)将Float16从CPU传输到GPU时,相比Float32还可节省一半带宽。