Source: https://bitahub.ustc.edu.cn/help/md/10.0%20%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98.html

1、退款说明

自购买之日起7天内可申请，申请通过邮箱icpadmin@iai.ustc.edu.cn联系，届时请提供订单号、邮箱号及退款理由。

系统会将费用退还至原账户。退款金额 =（剩余资源数/总资源数）×资源购买金额。退款期间产生的费用不退还，即提交退订申请至退订成功期间产生的费用不退还。

如出现疑似异常或恶意退货，bitahub有权否决退货申请，bitahub法律范围保持最终解释权。

2、每个用户可以使用多少存储？

1TiB。

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

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

3、为什么要限制文件数量？

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

4、使用平台需要哪些前置条件？

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

5、怎么计费？

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

6、可以部署在线服务吗？

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

7、支持多机多卡训练吗？

支持。需要自行处理通信问题。平台的网络是100Gbps infiniband，使用以太网IP通信。

在平台上，debug、V100、3090、A40这四类节点上启动的任务，他们内部的IP类似这样：

172.17.1.2  # V100-1
172.17.2.2  # V100-2
172.17.3.2  # V100-3
172.19.1.2  # 3090-1
172.19.2.2  # 3090-2
172.19.3.2  # 3090-3
172.20.1.2  # A40-1
172.20.2.2  # A40-2

在同类型节点的任务中，可以直接使用上述ip进行通信，即使是跨机器。因为宿主机上开启了路由转发。

跨类型的任务不能直接通信（没开转发）。

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

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

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

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

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

10、平台除了GPU服务器外，有大型的CPU计算服务器吗？

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

平台也有一部分CPU服务器，主要是用于平台上数据需要预处理的情况。

11、数据集、模型超过网页传输大小的，该怎么办？

参考这里上传数据集。这里介绍的方法，同时适用于上传和下载。

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

能（但尽量少申请），发送邮件到icpadmin@iai.ustc.edu.cn。同样默认只在工作日处理。

13、使用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，如此则使用的是模型目录，可避免重复下载。

14、为什么有时会显示”提交失败“，怎么应对？

可能原因与应对：
（1）代码超过200MB，建议代码中的数据集和模型文件单独维护，如果代码部分就是超过了200M，:(，那只能把其中一部分放到数据集里面。
（2）包含了.git文件夹（一般使用git clone的项目会包含），请删除后再上传，已经上传的可以在网页端删除
（3）项目目录超出配额。在个人中心中，查看存储使用情况，文件数量或大小，都可能引起超额。需对应删除项目或任务，释放新的空间才可再提交。注意，删除是非即时的，一般在30分钟内完成。
（4）另一个可能原因是项目版本控制被锁（一般是前一次操作被意外中断引起），须后台管理员删锁。您需要：提供项目名称和用户邮箱。或者，直接创建新的项目。这个情况很少见。

以上4种情况的表现是提交失败会很快返回。

（5）如果是等待长时间后（20分钟）再返回提交失败，并伴随着文件中心刷新慢或直接不刷新（即网页端看不到代码、模型和output）则是文件服务故障，管理员会及时排查该故障。这种情况也比较少见。

除了提交失败，还有一种特殊情形需要讨论：
（6）前期运行时，已经有任务正常运行，后期又额外地往项目代码中拷贝进了.git文件夹，并重新提交了任务，此时，版本管理信息将被破坏，造成任务相关的代码在网页端不可见（不影响已运行任务），只剩项目代码可见。这种情况无法恢复，请重建项目。

在排查“提交失败”时，请点击任务详情，记录网页上提示的失败信息。

15、项目的存储空间显示不足了，哪些会占用它？

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

16、我删了一部分任务和数据，为什么还提示空间不足？

页面上点删除任务或删除项目，后台并没有实时响应，而是每隔半小时处理一次。所以你最长可能要等待半小时。

另外，网页上显示的存储明细，也不是实时更新的，它取的是缓存数据，10分钟更新一次。假如后台已删，不妨碍接着写入。

如果你比较着急，可以通过文件中心或命令行(debug任务)进行删除，是实时生效的（尽管网页上并不一定会实时更新）。

17、哪里能看存储的使用情况？

（1）空间或文件数量不足时，会在项目汇总页上提示。请不要等到用完才清理，否则可能要等待半小时才可用。

（2）可以在个人中心中，查看项目、数据集、模型各分项的使用情况。

（3）如果还要再观察更细的，就只能挂载数据集、模型后，在终端中，用ls -l命令去查看。

类似这样：

root@RTX004:/data/bitatest001# ls -lh
total 451G
-rw-r--r--     1 root root    6 Jul  9  2022 1.txt
drwxr-xr-x     2 root root 4.0K Jul 21  2022 coco_for_yolov5
drwxr-xr-x    12 root root  82M Aug 29  2022 FashionMNIST
drwxr-xr-x     2 root root 4.0K Jul 21  2022 mycoco
drwxr-xr-x    12 root root  44K Apr 27  2022 tb_logs
drwxr-xr-x     8 root root 4.5G Apr 28 20:36 test001

其中第2栏为目录下的文件数量，第5栏为大小。

在项目、数据集、模型、输出这四类目录下，因为是使用共享存储，如果你像平常使用du ./命令来查看大小的话，并不能得到正确的值。而应该使用ls

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

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

19、我的任务GPU利用率持续在一个比较低的水平，有什么建议？

GPU利用率因任务而异。建议先排查下CPU利用率是否是瓶颈。查看资源监控，如果CPU利用率在一个整百利用率上，那很可能是：1）系统配给的CPU资源用完了，如1张1080ti，CPU利用率最多只能到400%；2）没利用好多线程，如线程数开少了。此时GPU一直在等待CPU。

也可能是任务需要频繁地从共享存储上取数据，且时间长。

20、观察到一个现象，刚开始训练时，会花较长的时间读取数据，训练一段时间后就降下来了，会是什么原因？

可能是宿主机的缓存命中了。平台上个人的数据集是存放在共享存储上的，当开始计算时，才从共享存储上取，受限于网络和存储带宽，可能较慢。取到计算节点上后，会在本地的SSD盘上缓存，下次取同样的数据则不再从共享存储取。

缓存有时候也不能起到很好的作用，如：

（1）1080ti、titanxp、v100这些老的机器上，只有400G的空间用于缓存，如果数据集比较大，或者同一机器上其他人的任务的数据量较大，缓存很可能不断地填入新数据，难以命中。

3090、A40这些新买的机器，则有2TB~4TB的空间用于缓存。

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

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

在Pytorch中，上述过程怎么实现？Tensor.float或Tensor.float16是精度转换函数，Tensor.to(device="cpu/gpu")是数据迁移函数，要让精度转换在数据迁移之后，如Tensor.to(device="cuda:0").float().