Snowflake存储过程存ML模型至Stage遇OSError: [Errno 28]设备空间不足
问题分析与解决方案
这个错误不是Snowflake Stage的空间不够,而是执行存储过程的Warehouse计算节点的本地/tmp目录空间不足。Stage的空间是云存储容量,和计算节点的本地临时磁盘是两回事,小规格的Warehouse(比如X-Small)的/tmp分区往往只有几十MB,哪怕你的模型不到100MB,也会因为/tmp被占满报错。
解决办法:
直接内存中转,跳过本地文件写入
不用把模型写到/tmp,直接在内存中生成字节流上传,彻底避免本地磁盘占用:from io import BytesIO import joblib # 把编码器写入内存缓冲区 encoder_buffer = BytesIO() joblib.dump(encoder, encoder_buffer) encoder_buffer.seek(0) # 重置缓冲区指针到起始位置 # 直接上传缓冲区内容到Stage session.file.put_stream(encoder_buffer, f"@DB.Schema/{model_type}encoder.joblib", overwrite=True)清理/tmp旧文件再写入
如果必须用本地文件,先删除/tmp下的旧临时文件释放空间:import os import glob # 清理/tmp下的旧joblib文件 for old_file in glob.glob('/tmp/*.joblib'): os.remove(old_file) # 执行原有的保存和上传逻辑 encoder_filename = model_type + "encoder.joblib" encoder_model_file = os.path.join('/tmp', encoder_filename) joblib.dump(encoder, encoder_model_file) session.file.put(encoder_model_file, "@DB.Schema", overwrite=True)升级Warehouse规格
小规格Warehouse的临时磁盘空间有限,换成更大的Warehouse(比如Small/Medium),能获得更多本地临时存储容量。
内容的提问来源于stack exchange,提问作者JAGADEESHA R G
相关产品推荐
相关产品推荐

