在R中使用pins包对接GCS时遇资源占用错误及后续问题
R语言vetiver+pins操作GCS的问题排查与解决
问题1:vetiver_pin_write报资源占用错误,但模型已写入GCS
可能原因
- GCS board的操作分为文件上传和元数据同步两个阶段,模型文件上传完成后,后续的元数据写入或连接清理步骤出现异常,触发资源占用报错,但核心模型文件已成功上传。
- 本地GCS客户端的连接未被正常释放,导致资源占用告警,不影响已完成的文件上传流程。
排查与解决
- 捕获详细错误信息,定位问题环节:
tryCatch({ board %>% vetiver_pin_write(v) }, error = function(e) { message("错误详情: ", e$message) print(e$call) })
- 显式管理GCS连接,避免资源泄漏:
- 初始化board时添加
cache = FALSE参数,禁用本地缓存减少资源占用:board <- board_gcs( "john-mlops-bucket", prefix = "iris/", cache = FALSE ) - 操作完成后手动断开连接:
pins::board_disconnect(board)
- 初始化board时添加
问题2:vetiver_write_plumber执行有警告,但plumber文件未写入GCS
核心原因
vetiver_write_plumber的设计逻辑是从指定board读取模型,在本地生成plumber文件,并不会自动将生成的文件上传到远程GCS存储桶。警告通常是模型读取环节的连接问题,或是本地文件生成的权限/路径问题。
解决步骤
- 先在本地生成plumber文件:
vetiver_write_plumber( board = board, name = "iris_model", rsconnect = FALSE, file = "./plumber.R" # 指定本地输出路径 )
- 验证模型是否能正常读取,排查警告来源:
# 测试从GCS读取模型 model <- board %>% pins::pin_read("iris_model") print(model)
- 将生成的plumber文件手动上传到GCS:
board %>% pins::pin_upload("./plumber.R", name = "iris_plumber")
内容的提问来源于stack exchange,提问作者TheGoat
相关产品推荐
相关产品推荐

