京东秒杀
国美-超级5
索尼Xperia旗舰
限时优惠页 - 京东
自营热卖

华为云深度学习服务试水笔记

沫离伤花 1年前   阅读数 192 0

最近接了一个图像识别的项目,公司配的笔记本电脑只是GT840M 2G显存,只能跑跑LeNet、MobileNet v2、NASNet Mobile这些小模型。效果虽然过得去,但是每个EPOCH几十分钟,真的让人心急死,都懒得去调参数。

干脆用华为云深度学习服务,测试一下。

华为云DLS的版本:

keras 2.2.0

tensorflow 1.8.0

有opencv、numpy等

但没有imutils,也就是原本 paths.list_images('/train')这样的,就得重写

所以获取图片的路径是首先要解决

先用OBS browser将图片传上OBS

image.png

目录架构如下:

s3://obs-xxxxxx/

                         |

                         -train

                                |

                                -type1

                                         |

                                         -001.jpg

                                         -002.jpg

                                -type2

                                         -001.jpg

                                         -002.jpg

                                .........

                        |

                         - test

                                |

                                -type1

                                         |

                                         -001.jpg

                                         -002.jpg

                                -type2

                                         -001.jpg

                                         -002.jpg

从OBS拉过图片过来

def getFilesHw(filepath):
    list = []
    dirs=mox.file.list_directory(filepath)
    for dir in dirs:
        files=mox.file.list_directory(filepath+dir+'/')
        for file in files:
            f=filepath+dir+'/'+file
            #print(f)
            list.append(f)
    return list
trainPaths = 's3://obs-xxxxxx/train/'
files=getFilesHw(trainPaths)

总算将目录拉过来了,问题用image=cv2.imread(imagePath)直接就空的呢(imagePath是写's3://obs-xxxxxx/train/type1/001.jpg')?

查了半天原来要这样用

image = cv2.imdecode(np.fromstring(mox.file.read(imagePath, binary=True), np.uint8), cv2.IMREAD_COLOR)

图片读过来了。

其它训练过程就和本地keras一样,毕竟不熟悉的情况不敢轻易用mox的api

然而到了保存环节,又来杯具了:

model.save(s3://obs-xxxxxx/model.bin) #直接报错

保存不了,只能用折中的办法,先将文件保存到DLS的本地,然后再复制回OBS

model.save('model.bin')
mox.file.copy('model.bin', s3://obs-xxxxxx/model.bin)

不过pickle方面就好很多,原来的代码是这样

f = open("label.bin", "wb")
f.write(pickle.dumps(label))
f.close()

改写成这样

with mox.file.File("s3://obs-xxxxxx/label.bin", "wb") as f:
    f.write(pickle.dumps(label))
    f.close()

至此完成移植,用华为云强大GPU测试一下,果然P100跑LeNet是小菜一碟,1分钟不到就搞定,有木有啊?

image.png

并且P100有16G显存,可以体验VGG、ResNet这些规模大的网络。

购买华为云请点击立即购买


注意:本文归作者所有,未经作者允许,不得转载

全部评论: 0

    我有话说: