You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Lambda写入EFS触发OSError:只读文件系统问题求助

问题分析与解决

核心问题

报错显示尝试写入/home/sbx_user1051只读目录,说明SentenceTransformer未使用指定的EFS缓存路径,而是默认尝试写入Lambda的只读用户主目录;同时EFS访问点的POSIX用户与Lambda运行时用户不匹配,也会导致权限写入失败。

解决方案

1. 补充完整的HuggingFace缓存环境变量

仅设置TRANSFORMERS_CACHE不足以覆盖所有HuggingFace工具的缓存路径,需在Lambda环境变量中添加以下配置:

{
  "TRANSFORMERS_CACHE": "/mnt/hf_models_cache",
  "HUGGINGFACE_HUB_CACHE": "/mnt/hf_models_cache",
  "SENTENCE_TRANSFORMERS_HOME": "/mnt/hf_models_cache"
}

强制所有HuggingFace相关组件将模型、缓存文件写入EFS挂载路径。

2. 匹配EFS访问点与Lambda运行时的POSIX用户

Lambda ARM64架构下默认运行用户sbx_user1051对应的UID/GID为1000,当前EFS访问点配置的是1001,权限不匹配。修改EFS访问点配置:

def create_efs(self):
    self.vpc = aws_ec2.Vpc(self, "VPC")
    self.fs = aws_efs.FileSystem(
        self, "FileSystem", vpc=self.vpc
    )
    self.access_point = self.fs.add_access_point(
        "MLAccessPoint",
        create_acl=aws_efs.Acl(
            owner_gid="1000", owner_uid="1000", permissions="750"
        ),
        path="/export/models",
        posix_user=aws_efs.PosixUser(gid="1000", uid="1000")
    )

将所有UID/GID参数改为1000,与Lambda运行用户一致。

3. 验证Docker镜像用户配置(可选)

若使用自定义Docker镜像,需确保镜像内用户的UID/GID与EFS配置一致,或在Dockerfile中显式指定用户:

RUN useradd -m -u 1000 lambda-user
USER lambda-user

4. 确认EFS路径权限

确保EFS访问点对应的/export/models目录权限允许1000用户写入,可通过挂载EFS到EC2实例手动调整:

chown 1000:1000 /export/models
chmod 750 /export/models

验证步骤

  1. 重新部署CDK栈,确保配置生效
  2. 触发Lambda函数,检查模型是否写入/mnt/hf_models_cache路径
  3. 查看CloudWatch日志,确认无只读文件系统报错

内容的提问来源于stack exchange,提问作者Kislay Kunal Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 19:23:09