SFS使用避坑说明

举报
yangzilong 发表于 2022/08/26 11:02:33 2022/08/26
【摘要】 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的相对路径能够对应上即可正常训练。

    文件拆分可以参考如下样例代码,建议在普通硬盘上操作后再上传SFSOBS

    ## 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.cn/blogs/370937

     

    问题:NFS不是全套支持POSIX协议,所以不能作为docker镜像存储目录。

    根因:不能在NFS上叠加overlayFS

    规避方案:在ECS上不要用NFS目录作为docker软件的根目录。

    【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
    • 点赞
    • 收藏
    • 关注作者

    评论(0

    0/1000
    抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。