SFS使用避坑说明
【摘要】 SFS是一种NFS协议在华为云的实现。NFS本身有一定的缺陷,所以在部分场景下会遇到使用问题。
本文会收集一些SFS使用的问题,以及对应的解决方案。
SFS是一种NFS协议在华为云的实现。NFS本身有一定的缺陷,所以在部分场景下会遇到使用问题。
问题:NFS单目录文件数过多时,会导致无法list目录。最终表现为使用时卡死。
根因:NFS的文件会分布式存储,单文件目录数超过1000时性能会明显劣化.
规避方案:
1. 使用本地盘。ModelArts的环境都有"/cache"目录,可以使用对应目录来存储数据集。数据集统一存到OBS目录,每次使用时先缓存到"/cache"目录。
通过查看目录是否存在,保障使用Notebook时多次执行不会重新下载数据集。具体操作可以参考如下shell脚本:
#!/bin/bash
## params needed
obs_path='obs://bucket-name/bucket-path/dataset/coco/'
cache_path='/cache/dataset/coco/'
AK=""
SK=""
## to get obsutil
if [ ! -f '/home/ma-user/utils/obsutil' ]; then
wget -P /home/ma-user/utils/ https://ma-sa-cn-south-1.obs.cn-south-1.myhuaweicloud.com/yangzilong/utils/obsutil
chmod 755 /home/ma-user/utils/obsutil
fi
## obsutil config is needed for the first time
#/home/ma-user/utils/obsutil config -i=$AK -k=$SK -e=obs.myhuaweicloud.com
## to cache dataset
if [ ! -d $cache_path ]; then
## make cache directory and get dataset.
mkdir -p $cache_path;
/home/ma-user/utils/obsutil cp -r -f -j 32 $obs_path $cache_path;
else
: # empty command
## if you need to check dataset every time, unmark the flowing line.
#/home/ma-user/utils/obsutil cp -r -f -u -j 32 $obs_path $cache_path;
fi
2. 针对单目录文件超过1w时,将目录切分并通过子目录存放。pytorch只要保障图像和label的相对路径能够对应上即可正常训练。
文件拆分可以参考如下样例代码,建议在普通硬盘上操作后再上传SFS或OBS。
## enter directory which store labels and images
cd /mnt/sfs_turbo/hryt/yolov5/yolov5-6.1/hryt_cls4
## split them into sub-directories with 1000 images each
ll images/train | awk 'BEGIN{lb_pre="labels/train"; img_pre="images/train"; idx=0; n=0; } $9~/.jpg$/{if(n>=1000) {idx=idx+1; n=0; cmd="mkdir -p "lb_pre"/dir"idx" && mkdir -p "img_pre"/dir"idx; print(cmd); cmd="mv "lb_names" "lb_pre"/dir"idx; print(cmd); cmd="mv "img_names" "img_pre"/dir"idx; print(cmd); lb_names=""; img_names=""} n=n+1; name=$9; gsub(/.jpg$/,"",name); lb_names=lb_names" "lb_pre"/"name".txt"; img_names=img_names" "img_pre"/"name".jpg"; }END{idx=idx+1; n=0; cmd="mkdir -p "lb_pre"/dir"idx" && mkdir -p "img_pre"/dir"idx; print(cmd); cmd="mv "lb_names" "lb_pre"/dir"idx; print(cmd); cmd="mv "img_names" "img_pre"/dir"idx; print(cmd);}'
问题:多个notebook实例挂载一个SFS盘,且每个实例会有多个VS Code客户端远程链接时,经常断连+重连慢+需要重新安装插件。
根因:多实例、多VS Code客户端使用统一的NFS目录存放,导致锁冲突以及插件冲突问题。
规避方案:进行VS Code的参数配置来避免锁问题,参考博客:https://bbs.huaweicloud.com/blogs/370937
问题:NFS不是全套支持POSIX协议,所以不能作为docker镜像存储目录。
根因:不能在NFS上叠加overlayFS
规避方案:在ECS上不要用NFS目录作为docker软件的根目录。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)