
# 模型训练存储加速
针对AI训练场景中大模型Checkpoint保存和加载带来的I/O挑战，华为云提供了基于对象存储服务OBS+高性能弹性文件服务SFS Turbo的AI云存储解决方案，如下图所示。
SFS Turbo HPC型支持和OBS数据联动，您可以通过SFS Turbo HPC型文件系统来加速对OBS对象存储中的数据访问，并将生成的结果数据异步持久化到OBS对象存储中长期低成本保存。
图1基于OBS+SFS Turbo的存储解决方案   
![](https://support.huaweicloud.com/develop-modelarts/figure/zh-cn_image_0000002006728521.png "点击放大")
OBS + SFS Turbo存储加速的具体方案请参见[面向AI场景使用OBS+SFS Turbo的存储加速实践](https://support.huaweicloud.com/bestpractice-sfsturbo/sfsturbo_03_0019.html)。
当训练程序从已有Checkpoint恢复时，每张卡都需要从持久化存储中加载，在训练集群规模较大，存储带宽较低的场景下，加载耗时可能会达到小时级，严重影响训练恢复。因此，通过AITurbo SDK的快速保存和加载Checkpoint的功能，可以有效提升训练恢复速度。具体方案请参见[通过AITurbo加速保存与加载checkpoint](https://support.huaweicloud.com/usermanual-sfsturbo/sfsturbo_01_1001.html)。
- 在保存Checkpoint的时候，利用两阶段写、内存副本、异步持久化等技术保证Checkpoint的快速、高可靠存储。
- 在加载Checkpoint的时候，利用内存快恢、Checkpoint广播等技术，大大减少后端存储的带宽压力，提升加载效率。
 
#### 前提条件
- 已有可用的OBS桶。
- 已开通SFS Turbo服务。
- 由于训练作业运行需消耗资源，为了避免训练失败请确保账户无欠费。
- 确保使用的OBS目录与ModelArts在同一区域。
 
#### 计费影响
在ModelArts进行模型训练时，会产生计算资源和存储资源的累计值计费。计算资源为训练作业运行的费用。存储资源包括数据存储到OBS或SFS的费用。详见[模型训练计费项](https://support.huaweicloud.com/price-modelarts/price-modelarts-0011.html)。
 #### 设置训练存储加速
1. 当完成[上传数据至OBS并预热到SFS Turbo中](https://support.huaweicloud.com/bestpractice-sfsturbo/sfsturbo_03_0030.html)步骤后，在ModelArts中创建训练作业时，设置训练"SFS Turbo"，在"文件系统"中选择SFS Turbo实例名称，并指定"文件系统目录"和"挂载路径"。系统会在训练作业启动前，自动将存储位置中的文件目录挂载到训练容器中指定路径。
   图2设置训练SFS Turbo   
   ![](https://support.huaweicloud.com/develop-modelarts/figure/zh-cn_image_0000002677885789.png "点击放大") 
2. 设置挂载参数。挂载参数用于设置挂载文件系统的相关属性。常用挂载参数说明见[表1]。如果您需要对存储做精细化挂载管理，也可以增加一些性能调优的挂载参数，调优挂载参数相关配置列表请参见[表2]。
    表1挂载参数列表 
   | 参数                      | 参数值      | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
   |:---|:---|:---|
   | keep-original-ownership | 无需填写     | 表示是否保留文件挂载点的ownership，使用该参数时，要求everest插件版本为1.2.63或2.1.2以上。 - 默认为不添加该参数，此时挂载极速文件存储时将会默认把挂载点的ownership修改为root:root。    - 如添加该参数，挂载极速文件存储时将保持文件系统原有的ownership。   |
   | vers                    | 3        | 文件系统版本，目前只支持NFSv3。取值：3                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
   | nolock                  | 默认nolock | 选择是否使用NLM协议在服务器上锁文件。当选择nolock选项时，锁对于同一主机的应用有效，对不同主机不受锁的影响。                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
   | timeo                   | 600      | NFS客户端重传请求前的等待时间(单位为0.1秒)。建议值：600。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
   | hard/soft               | 默认hard   | 挂载方式类型。 - 取值为hard，即使用硬连接方式，如果NFS请求超时，则客户端一直重新请求直至成功。  - 取值为soft，即软挂载方式挂载系统，如果NFS请求超时，则客户端向调用程序返回错误。   默认为hard。                                                                                                        |
   | sharecache/nosharecache | 无需填写     | 设置客户端并发挂载同一文件系统时数据缓存和属性缓存的共享方式。设置为sharecache时，多个挂载共享同一缓存。设为nosharecache时，每个挂载各有一个缓存。默认为sharecache。 说明： 设置nosharecache禁用共享缓存会对性能产生一定影响。每次挂载都会重新获取挂载信息，会增加与NFS服务器的通信开销和NFS客户端的内存消耗，同时同客户端设置nosharecache存在cache不一致的风险。因此，应该根据具体情况进行权衡，以确定是否需要使用nosharecache选项。                                                                                                                                                        |
      
    表2调优挂载参数列表 
   | 参数         | 说明                                                                                                                                                                                                                                                                                                                  |
   |:---|:---|
   | rsize      | 每次向服务器读取文件的最大字节数。实际数据小于或等于此值。rsize必须是1024倍数的正整数，小于1024时自动设为4096，大于1048576时自动设为1048576。默认时，服务器和客户端进行协商后设置。 建议设置为最大值1048576。                                                                                                                                             |
   | wsize      | 每次向服务器写入文件的最大字节数。实际数据小于或等于此值。wsize必须是1024倍数的正整数，小于1024时自动设为4096，大于1048576时自动设为1048576。默认时，服务器和客户端进行协商后设置。 建议设置为最大值1048576。                                                                                                                                           |
   | retrans    | 客户端返回错误前的重传次数。建议值：1。                                                                                                                                                                                                                                                                                                |
   | tcp/udp    | 不指定mountproto时，客户端默认先尝试使用udp协议挂载，如果udp网络不通则会在卡顿几秒后再尝试tcp协议挂载。 当前默认没有放通安全组入方向mount协议的udp端口号，需要将mount挂载协议设置为TCP传输协议，即mountproto=tcp。                                                                                                                                      |
   | ro/rw      | - ro：表示采用只读的方式挂载。  - rw：表示采用读写的方式挂载。   默认为rw。未写明ro/rw时，则默认为采用rw读写的方式挂载。 |
   | noresvport | 指定NFS客户端向NFS服务端重新发起建立连接时使用新的TCP端口。 例如在网络切换时，文件系统可能会发生阻塞，可能需要几分钟才会自动恢复连接，更严重时甚至需要重启ECS才能恢复。强烈建议使用noresvport参数，这可以保障网络发生故障恢复事件后文件系统服务不会中断。                                                                                                                              |
   | sync/async | sync为同步写入，表示将写入文件的数据立即写入服务端；async为异步写入，表示将数据先写入缓存，再写入服务端。 同步写入要求NFS服务器必须将每个数据都刷入服务端后，才可以返回成功，时延较高。建议设置为async。                                                                                                                                                        |
   | noatime    | 如果不需要记录文件的访问时间，可以设置该参数。避免频繁访问时，修改访问时间带来的开销。                                                                                                                                                                                                                                                                         |
   | nodiratime | 如果不需要记录目录的访问时间，可以设置该参数。避免频繁访问时，修改访问时间带来的开销。                                                                                                                                                                                                                                                                         |
      
   
![](https://support.huaweicloud.com/develop-modelarts/public_sys-resources/caution_3.0-zh-cn.png)
当前训练作业支持挂载多个弹性文件服务SFS Turbo，文件系统支持重复挂载，但挂载路径不可重复。文件系统目录需指定已存在的目录，否则会导致训练作业异常。
然后在超参或者环境变量中设置checkpoint和数据的挂载路径。
图3在超参或者环境变量中设置checkpoint和数据的挂载路径   
![](https://support.huaweicloud.com/develop-modelarts/figure/zh-cn_image_0000002499573096.png "点击放大")
#### 训练存储加速的代码样例
详情参见[高可靠性前置准备：断点续训练](https://support.huaweicloud.com/develop-modelarts/develop-modelarts-0023.html)。
