如何在PowerShell中向gcloud传递字典类型参数
在PowerShell中向Google Cloud AI Platform提交训练任务时传递字典类型参数的解决方法
问题描述
我参考官方教程,尝试用以下gcloud命令将神经网络模型提交至Google Cloud AI Platform:
gcloud ai-platform jobs submit training ${JOB_NAME} \ --region=us-central1 \ --master-image-uri=gcr.io/cloud-ml-public/training/pytorch-gpu.1-10 \ --scale-tier=CUSTOM \ --master-machine-type=n1-standard-8 \ --master-accelerator=type=nvidia-tesla-p100,count=1 \ --job-dir=${JOB_DIR} \ --package-path=./trainer \ --module-name=trainer.task \ -- \ --train-files=gs://cloud-samples-data/ai-platform/chicago_taxi/training/small/taxi_trips_train.csv \ --eval-files=gs://cloud-samples-data/ai-platform/chicago_taxi/training/small/taxi_trips_eval.csv \ --num-epochs=10 \ --batch-size=100 \ --learning-rate=0.001
在PowerShell环境中,--master-accelerator参数需要传递字典类型,我尝试使用@{count=1; type=nvidia-tesla-p100}格式时收到「Bad syntax for dict arg: [@]」错误,也试过参考官方转义文档使用特殊分隔符,但仍提示无效。请问如何在PowerShell中传递此类参数,让gcloud命令能够正确接受?
解决方案
PowerShell中处理gcloud的字典类型参数时,不需要使用PowerShell的哈希表语法,直接沿用Linux/bash风格的键值对逗号分隔格式即可,但需要注意逗号的转义,或者用引号包裹整个参数值。以下是两种可行写法:
写法1:用单引号包裹整个参数值
gcloud ai-platform jobs submit training $JOB_NAME ` --region=us-central1 ` --master-image-uri=gcr.io/cloud-ml-public/training/pytorch-gpu.1-10 ` --scale-tier=CUSTOM ` --master-machine-type=n1-standard-8 ` --master-accelerator='type=nvidia-tesla-p100,count=1' ` --job-dir=$JOB_DIR ` --package-path=./trainer ` --module-name=trainer.task ` -- ` --train-files=gs://cloud-samples-data/ai-platform/chicago_taxi/training/small/taxi_trips_train.csv ` --eval-files=gs://cloud-samples-data/ai-platform/chicago_taxi/training/small/taxi_trips_eval.csv ` --num-epochs=10 ` --batch-size=100 ` --learning-rate=0.001
写法2:对逗号进行转义(使用反引号`)
gcloud ai-platform jobs submit training $JOB_NAME ` --region=us-central1 ` --master-image-uri=gcr.io/cloud-ml-public/training/pytorch-gpu.1-10 ` --scale-tier=CUSTOM ` --master-machine-type=n1-standard-8 ` --master-accelerator=type=nvidia-tesla-p100`,count=1 ` --job-dir=$JOB_DIR ` --package-path=./trainer ` --module-name=trainer.task ` -- ` --train-files=gs://cloud-samples-data/ai-platform/chicago_taxi/training/small/taxi_trips_train.csv ` --eval-files=gs://cloud-samples-data/ai-platform/chicago_taxi/training/small/taxi_trips_eval.csv ` --num-epochs=10 ` --batch-size=100 ` --learning-rate=0.001
原理说明
PowerShell会把无引号的逗号当作命令参数分隔符,导致gcloud接收到的参数被拆分。用引号包裹或转义逗号可以避免这个问题,让gcloud完整接收整个字典格式的参数值。
内容的提问来源于stack exchange,提问作者Chenoille
相关产品推荐
相关产品推荐

