无法提交gcloud ML训练作业:文件复制404错误求助
我之前帮朋友排查过几乎一模一样的问题,这个404错误大概率是路径、权限或者命令语法的问题,咱们一步步来解决:
排查与解决步骤
1. 先确认本地的包文件存在且路径正确
首先你得确保当前工作目录下,dist/object_detection-0.1.tar.gz(还有你命令里没写完的slim/dist/slim...包)是真实存在的。可以直接在终端跑这个命令验证:
ls -l dist/object_detection-0.1.tar.gz slim/dist/[你的slim完整包名]
如果终端提示“No such file or directory”,那就是你没生成对应的包,或者路径写错了。得回到object_detection和slim目录下,重新执行打包命令:
# 在object_detection目录下 python setup.py sdist # 在slim目录下 python setup.py sdist
等打包完成后,再回到原来的工作目录继续操作。
2. 修正GCS存储桶的命令语法错误
看你提交命令里的--job-dir参数有明显的语法问题:gs://${object-detection-tutorial-bucket1/}/train
- 变量名里不能包含斜杠
/,应该改成合法的变量名,比如${object_detection_tutorial_bucket1},而且要提前用export定义好这个变量:export object_detection_tutorial_bucket1="你的存储桶名称" - 路径里多余的结尾斜杠也要去掉,正确的写法是
gs://${object_detection_tutorial_bucket1}/train
接下来验证你的存储桶是否真的存在:
gsutil ls gs://${object_detection_tutorial_bucket1}
如果返回404,说明桶还没创建,得先创建:
gsutil mb gs://${object_detection_tutorial_bucket1}
3. 检查账号对GCS桶的写入权限
有时候桶存在,但当前登录的gcloud账号没有写入权限,也会导致上传失败。你可以手动上传一个测试文件验证:
echo "test content" > test.txt gsutil cp test.txt gs://${object_detection_tutorial_bucket1}/test.txt
如果上传失败提示权限错误,就需要去GCS控制台给你的账号添加Storage Object Creator或者Storage Admin权限,或者检查桶的IAM设置。
4. 更新gcloud SDK到最新版本
旧版本的gcloud ML Engine工具偶尔会有上传包的bug,更新到最新版本大概率能解决一些奇怪的问题:
gcloud components update
5. 手动上传包到GCS后再提交作业
如果上面的步骤都试过还是不行,咱们换个思路:先把本地的包手动上传到GCS,然后提交命令里直接用GCS路径的包,比如:
# 上传object_detection包 gsutil cp dist/object_detection-0.1.tar.gz gs://${object_detection_tutorial_bucket1}/packages/ # 上传slim包 gsutil cp slim/dist/slim-0.1.tar.gz gs://${object_detection_tutorial_bucket1}/packages/
然后提交命令改成:
gcloud ml-engine jobs submit training ${train1} \ --job-dir=gs://${object_detection_tutorial_bucket1}/train \ --packages gs://${object_detection_tutorial_bucket1}/packages/object_detection-0.1.tar.gz,gs://${object_detection_tutorial_bucket1}/packages/slim-0.1.tar.gz \ # 加上你原来的其他参数
内容的提问来源于stack exchange,提问作者Victoria Cabales
相关产品推荐
相关产品推荐

