Tensorflow 云计算虚拟机与人工智能平台的性能差异

Tensorflow 云计算虚拟机与人工智能平台的性能差异,tensorflow,google-cloud-platform,google-cloud-ml,gcp-ai-platform-training,Tensorflow,Google Cloud Platform,Google Cloud Ml,Gcp Ai Platform Training,我有一个GCP云计算虚拟机,它是一个n1-standard-16,连接了4个P100 GPU,还有一个用于存储数据的固态驱动器。我将把它称为“虚拟机” 我以前用虚拟机训练过一个基于tensorflow的CNN。我想从这一点转移到使用AI平台,这样我就可以同时运行多个作业。但是我遇到了一些问题 问题 当在虚拟机上运行培训时,我可以将批量大小设置为400,一个历元完成的标准时间约为25分钟 当培训在complex_model_m_p100AI平台机器上运行时,我认为这相当于VM,我可以将最大批量设置

我有一个GCP云计算虚拟机,它是一个
n1-standard-16
,连接了4个P100 GPU,还有一个用于存储数据的固态驱动器。我将把它称为“虚拟机”

我以前用虚拟机训练过一个基于tensorflow的CNN。我想从这一点转移到使用AI平台,这样我就可以同时运行多个作业。但是我遇到了一些问题

问题 当在虚拟机上运行培训时,我可以将批量大小设置为400,一个历元完成的标准时间约为25分钟

当培训在
complex_model_m_p100
AI平台机器上运行时,我认为这相当于VM,我可以将最大批量设置为128,一个历元完成的标准时间为1小时40分钟

区别:虚拟机与人工智能平台
  • VM使用TF1.12,AI平台使用TF1.15。因此,GPU驱动程序存在差异(CUDA 9与CUDA 10)

  • 虚拟机配备了固态驱动器,我认为AI平台机器的情况并非如此


我想了解批量减少的原因,并将AI平台上的纪元时间减少到与Glamdring相当的水平。还有其他人遇到过这个问题吗?我是否在正确的AI平台机器上运行?欢迎任何建议

可能是一堆东西。有两种方法可以让虚拟机看起来更像人工智能平台:

export IMAGE_FAMILY="tf-latest-gpu" # 1.15 instead of 1.12
export ZONE=...
export INSTANCE_NAME=...

gcloud compute instances create $INSTANCE_NAME \
  --zone=$ZONE \
  --image-family=$IMAGE_FAMILY \
  --image-project=deeplearning-platform-release \
  --maintenance-policy=TERMINATE \
  --metadata="install-nvidia-driver=True"
n,然后连接4个GPU

。。。或者让AI平台看起来更像虚拟机: ,
因为您现在使用的是旧机器

在遵循@Frederik Bode的建议并使用TF 1.15和相关驱动程序创建了一个副本VM之后,我成功地解决了我的问题

与其在tf.keras中使用
多gpu\u模型
函数调用,实际上最好使用分布式策略并在该范围内运行模型

有一个指南描述了如何做

现在我的代码基本上如下所示:

mirrored_strategy = tf.distribute.MirroredStrategy()

with mirrored_strategy.scope():

    training_dataset, validation_dataset = get_datasets()

    model = setup_model()

    # Don't do this, it's not necessary!
    #### NOT NEEDED model = tf.keras.utils.multi_gpu_model(model, 4)

    opt = tf.keras.optimizers.Adam(learning_rate=args.learning_rate)

    model.compile(loss='sparse_categorical_crossentropy',
              optimizer=opt,
              metrics=['accuracy'])

    steps_per_epoch = args.steps_per_epoch
    validation_steps = args.validation_steps

    model.fit(training_dataset, steps_per_epoch=steps_per_epoch, epochs=args.num_epochs,
                validation_data=validation_dataset, validation_steps=validation_steps)
我设置了一个小数据集,以便能够快速地对其进行原型化

使用单个P100 GPU,历元时间平均为66秒


对于4个GPU,使用上述代码,平均历元时间为19秒。

感谢您的建议!我在这样配置的机器上运行了一个比较作业:
masterType:n1-highcpu-16 masterConfig:acceleratorConfig:count:4 type:NVIDIA_TESLA_P100
,但我仍然看到~4倍的减速!4倍减速建议您只使用4个GPU中的一个。你可以试着比较VM-2GPU和AIPlatform-2GPU,看看是否有2倍的慢下来。要解决这个问题,你可能需要添加某种分布式训练策略,AIPlatform可能因为某种奇怪的原因设置了一个不同于标准tensorflow的默认策略。好吧,这很奇怪。4个GPU:每个历元160秒,2个GPU:每个历元160秒,1个GPU:每个历元80秒!你知道这是怎么发生的吗?嗯,该死,这仍然是2倍的减速,这意味着它仍然是另外一回事。您是否尝试过使用1个GPU的虚拟机,这是als 80秒/历元吗?我的猜测是,使用分发策略的AII平台会将性能降低2倍,而不是提高2倍。这就是为什么性能会降低4倍。默认情况下,AII平台会提供常规100GB持久磁盘,如果访问本地磁盘上的数据集,这可能会影响IO吞吐量。你能在一个有普通永久磁盘的GCE虚拟机上试用一下吗?这不是一个编程问题,而是一个关于服务器配置的问题,应该在@GuoqingXu上询问,我很想知道记录在哪里。我有1TB的培训数据,我认为AI平台培训对我来说不起作用,只是在我的容器开始时从GCS获取18GB的文件以46%的速度失败,它只是放弃了。你能给cloudml发送一封描述问题的电子邮件吗-feedback@google.com? 我们将确保这些问题得到解决。