计算机系统应用教程网站

网站首页 > 技术文章 正文

在阿里云HPC容器服务上,像梵高一样作画

btikc 2024-10-29 13:16:10 技术文章 5 ℃ 0 评论

本系列将利用Docker和阿里云HPC容器服务,帮助您上手TensorFlow的机器学习方案

  • 第一篇:打造TensorFlow的实验环境

  • 第二篇:轻松搭建TensorFlow Serving集群

  • 第三篇:打通TensorFlow持续训练链路

  • 第四篇:利用Neural Style的TensorFlow实现,像梵高一样作画

本文是该系列中的第四篇文章, 将为您介绍如何利用阿里云的服务瞬间变身梵高,给自己生活中的图片带来不一样的艺术气息。

1890年7月29日,梵高在一片麦田里结束了自己的年仅37岁的生命,他给全世界留下《星夜》、《向日葵》与《有乌鸦的麦田》这些伟大的作品。特别当看到《星夜》中像焰火一样闪亮的星星时,你是否感受到了他对绘画火焰般的热情。

梵高曾写道:“我常想,要是我能够多花些时间来画真正的风景画,那该多好!我经常看到各种奇景,使我不由自主地说:我在画上从来没有见过这么好的风景。” 这是大师和后世共同的遗憾。

而随着科技的发展,到了今天,我们也能够创造出和梵高风格近似的艺术作品。具体来说,就是利用深度学习,将梵高的风格从他的作品中提取出来,并赋予到我们现有的图片,就可以得到用梵高风格画出来的新的图片。这里会使用一个叫做neural-style的TensorFlow实现来完成这个任务,它基于强大的深度神经网络(VGG19)来对图片进行处理。以下就是输入图片, 我们要将其转化为有星夜风格的图片:

然而,部署和运行这个算法可不简单,它至少需要:

  • 深度学习本身需要大规模的矩阵计算,但我们不想要花费几天、几个星期,甚至几个月来等待结果;因此利用GPU加速计算过程是必须的选择

  • 安装CUDA,Cudnn,Bazel,TensorFlow及其依赖,neural-stlye这些工具和库的复杂度,装过的宝宝心里都苦;因此GPU应用的简化部署也是必须的

  • 作为深度学习实验环境相对于其它系统,更为脆弱,而参数、配置和依赖库的变化,都会导致系统停止工作,重复的环境搭建不可避免;因此不断的重复部署和配置也是必须的

而HPC容器服务很好的利用Docker技术简化了GPU上应用部署和配置,同时又增加了以Nvidia GPU卡为粒度的调度和隔离,很好的满足了以上的3个需求。我们用一个简单的例子向您展示使用HPC上容器服务,可以一键式画出星空风格的街景。

利用HPC容器服务一键式运行neural-style模仿梵高作画

1. 购买北京HPC后,按照北京HPC使用docker服务的文档在HPC机器上部署容器服务。

2. 当安装完成后,确认容器服务上支持了GPU,可以看到每台阿里云HPC上有两个GPU,其中还有每个GPU的配置

3. 为了简化部署,我们提供了一个预先构建的neural style的镜像

  • registry-internal.cn-beijing.aliyuncs.com/cheyang/neural-style

以下创建是该镜像的Dockerfile

FROM registry.cn-hangzhou.aliyuncs.com/denverdino/tensorflow:0.10.0-devel-gpuRUN cd / \ && git clone https://github.com/anishathalye/neural-style.git \ && cd neural-style \ && wget http://www.vlfeat.org/matconvnet/models/beta16/imagenet-vgg-verydeep-19.matRUN pip install SciPy Pillow NumPyWORKDIR /neural-styleCMD ["python","neural_style.py","--content", "/neural/input.jpg","--styles", "/neural-style/examples/1-style.jpg", "--output", "/neural/output.jpg"]

4. 按照在HPC容器服务上创建OSS数据卷创建一个OSS数据卷,并且用OSS客户端的图片上传上去

5. 用如下的docker-compose模板部署到阿里云HPC容器服务上,就可以按照《星夜》的风格(1-stlye.jpg)生成我们期望看到的图片。

version: '2'labels: aliyun.project_type: "batch"services: neural: image: registry-internal.cn-beijing.aliyuncs.com/cheyang/neural-style:latest command: - "python" - "neural_style.py" - "--content" - "/neural/input.jpg" - "--styles" - "/neural-style/examples/1-style.jpg" - "--output" - "/neural/output.jpg" labels: - aliyun.gpu=1 volumes: - neural:/neural

注:

  • aliyun.project_type: "batch"指定该应用使用的是离线应用,如果希望了解离线计算的元语,可以参考在阿里云容器服务中运行离线任务文档

  • aliyun.gpu指定申请的GPU个数。阿里云容器服务负责分配GPU给容器,并且将主机上的GPU卡映射到容器内,这里同时会做到对用户透明。举例来说,如果用户申请一个GPU,而主机上只有/dev/nvidia1可用,将主机上的/dev/nvidia1映射为容器里的/dev/nvidia0,这样就会让用户程序与具体设备号解耦。

  • volumes使用了OSS来存储输入的图片和输出的图片,如果感兴趣可以参考文档容器服务和OSS数据卷

6. 可以到容器服务的应用状态页面查看进度,当发现应用完成后,就可以下载星夜风格的图片了

这样就可以看到星夜版的街景了

7. 如果你部署了监控服务,就可以一站式的在计算过程中监控GPU的使用率,内存使用率和温度。这是实际的应用中非常有价值的数据,比如Nvidia GPU在温度高到一定程度的时候,是会导致计算停滞等问题。通过基础架构监控,帮您对基础架构的使用一目了然。

总结

可以看到,在HPC容器服务上运行模仿梵高的Neural Style是如此的轻松写意,只需要一个镜像和一个Docker Compose文件,HPC容器服务帮您搞定其它。您还可以在此之上尝试其他的机器学习应用,体验加快创新速度的愉悦。

利用阿里云HPC容器服务,您除了可以获得高性能计算的洪荒之力,还可以简单的掌控这种能力,实现快速测试、部署机器学习应用,进而加速机器学习产品化的速度。HPC容器服务提供GPU资源的调度和管理,再加上对象存储,日志、监控等基础设施能力,帮助用户专注于利用机器学习创造商业价值。

本文的其他链接,可在这里看到:https://yq.aliyun.com/articles/68206

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表