|
|
51CTO旗下网站
|
|
移动端

使用DC/OS为企业数据科学加速!

这篇逐步介绍的教程介绍了使用Tensorflow将DC/OS Data Science Engine设置成PaaS,用于支持分布式多节点多GPU模型训练。

作者:布加迪编译来源:51CTO.com|2019-10-22 08:00

【51CTO.com快译】作为一名专注于构建和交付新产品的全栈机器学习顾问,我常发现自己处于数据科学、数据工程和开发运维的交汇点。因此,我一直非常关注数据科学平台即服务(PaaS)的兴起。我最近着手评估不同的平台即服务(PaaS)及其使数据科学操作实现自动化的潜力。我在探究它们的功能,然后使用一个或多个PaaS使代码的设置和执行实现自动化。

为什么是DC/OS Data Science Engine?

在任何一个给定的云环境,比如亚马逊网络服务(AWS)、谷歌云平台(GCP)和微软Azure,设置Jupyter笔记本(notebook)变得很容易,以便数据科学家个人能够工作。对于初创公司和小型数据科学团队来说,这是一个很好的解决方案。什么都不需要维护,笔记本可以保存在Github中以实现持久性和共享。

对于大型企业来说,事情可没有这么简单。在这种规模下,由于环境和建模变得不可重现,跨多云的短暂资产上的临时环境会带来混乱而不是有序。企业跨多云和在本地运作,有特定的访问控制和验证要求,需要能够访问内部资源,用于数据、源控制、数据流及其他服务。

对于这些组织而言,DC/OS Data Science Engine提供了统一的系统,该系统提供Python机器学习堆栈、Spark、Tensorflow及其他深度学习框架,包括TensorFlowOnSpark,以实现分布式多节点多GPU模型训练。这是非常引人注目的方案,设置后直接可以使用,为大型的数据科学团队和公司大大消除了沮丧和复杂性。

AWS上的Data Science Engine

DC/OS Universal Installer是一个terraform模块,可轻松启动DC/OS集群,带有用于训练神经网络的GPU实例。这里有个地方要注意:你拥有足够多的通过亚马逊的服务限制授权的GPU实例。AWS Service Limits定义了你可以在任何给定区域使用多少AWS资源。默认分配的GPU实例为零,可能需要一两天才能授权更多实例。如果你需要加快速度,可以进入到AWS支持中心,请求与专员联系。他们通常可以大大加快进程。

想使用Terraform引导集群,我们只需要在paas_blog/dcos/terraform/desired_cluster_profile.tfvars中编辑下列变量:

  1. cluster_owner = "rjurney" 
  2. dcos_superuser_password_hash = "${file("dcos_superuser_password_hash")}" 
  3. dcos_superuser_username = "rjurney" 
  4. dcos_license_key_contents = "" 
  5. dcos_license_key_file = "./license.txt" 
  6. dcos_version = "1.13.4" 
  7. dcos_variant = "open" 
  8. bootstrap_instance_type = "m5.xlarge" 
  9. gpu_agent_instance_type = "p3.2xlarge" 
  10. num_gpu_agents = "5" 
  11. ssh_public_key_file = "./my_key.pub" 

并运行下列命令:

  1. bash  
  2. terraform init -upgrade  
  3. terraform plan -var-file desired_cluster_profile.tfvars -out plan.out  
  4. terraform apply "plan.out" 

apply命令的输出将包括一个或多个主节点的IP,这只对你的IP开放。打开master url会显示登录屏幕,你可以使用Google、Github、微软或预先配置的密码来验证身份。

一旦你完成这步,想拆除集群,请运行:

  1. bash  
  2. terraform destroy --auto-approve --var-file desired_cluster_profile.tfvars 

可以从DC/OS Web控制台找到Data Science Engine以及Catalog菜单上的其他诸多服务,比如Kafka、Spark和Cassandra。我们只需要选择“data-science-engine”软件包,配置提供服务的资源:CPU、RAM和GPU。如果需要,还有许多其他选项,但它们不是必需的。

一旦我们点击了Review & Run并确认,将进入到服务页面。几秒钟内完成部署后,我们只需点击服务名称上的箭头,便进入到JupyterLab实例。

JupyterLab的Github模块很出色,已预先安装,可以轻松加载我为了测试系统而创建的教程笔记本。点击Github图标,输入rjurney,其中显示可调出我的公共存储库列表。选择paas_blog,然后双击DCOS_Data_Science_Engine.ipynb Jupyter笔记本即可打开它。它使用S3上的数据,因此不必下载任何数据。

本教程基于一个名为Kim-CNN的卷积神经网络文档分类器模型,为786个最频繁的标签创建了一个Stack Overflow标记器(tagger)。笔记本是深度网络和自然语言处理(NLP)所常见的。我们先验证GPU支持在Tensorflow中适用,我们还遵循为所有模型参数定义变量的最佳做法,以方便搜索超参数。然后,在执行测试/训练拆分之前,我们对标签进行标记化、填充并转换成矩阵,以便一旦训练完毕,我们就能独立验证模型的性能。

  1. python 
  2. tokenizer = Tokenizer( 
  3. num_words=TOKEN_COUNT, 
  4. oov_token='__PAD__' 
  5. tokenizer.fit_on_texts(documents) 
  6.  
  7. sequences = tokenizer.texts_to_sequences(documents) 
  8.  
  9. padded_sequences = pad_sequences( 
  10. sequences, 
  11. maxlen=MAX_LEN, 
  12. dtype='int32'
  13. padding='post'
  14. truncating='post'
  15. value=1 

Kim-CN使用不同长度的一维卷积和max-over-time pooling方法,连接结果,这些结果进入到较低维度的密集层,然后最终的sigmoid函数激活与标签对应的密集层。模型的核心已在下面实现,作了几处改动。 来源:Yoon Kim所著的《用于句子分类的卷积神经网络》

  1. python 
  2. Create convlutions of different sizes 
  3. convs = [] 
  4. for filter_size in FILTER_SIZE: 
  5. f_conv = Conv1D( 
  6. filters=FILTER_COUNT, 
  7. kernel_size=filter_size, 
  8. padding=CONV_PADDING, 
  9. activation=ACTIVATION 
  10. )(drp) 
  11. f_shape = Reshape((MAX_LEN * EMBED_SIZE, 1))(f_conv) 
  12. f_pool = MaxPool1D(filter_size)(f_conv) 
  13. convs.append(f_pool) 
  14.  
  15. l_merge = concatenate(convs, axis=1) 
  16.  
  17. l_conv = Conv1D( 
  18. 128, 
  19. 5, 
  20. activation=ACTIVATION 
  21. )(l_merge) 
  22. l_pool = GlobalMaxPool1D()(l_conv) 
  23.  
  24. l_flat = Flatten()(l_pool) 
  25. l_drp = Dropout(CONV_DROPOUT_RATIO)(l_flat) 
  26.  
  27. l_dense = Dense( 
  28. 60, 
  29. activation=ACTIVATION 
  30. )(l_drp) 
  31.  
  32. out_dense = Dense( 
  33. y_train.shape[1], 
  34. activation='sigmoid' 
  35. )(l_dense) 

虽然数据经过上采样(upsampled)以平衡类,仍存在足够的不平衡,我们需要计算类权重,帮助模型学会预测常见标签和不常见标签。若没有类权重,损失函数(loss function)对常见标签和不常见标签同等处理,导致模型不可能预测不常见标签。

Python

  1. train_weight_vec = list(np.max(np.sum(y_train, axis=0)) / np.sum(y_train, axis=0))  
  2. train_class_weights = {i: train_weight_vec[i] for i in range(y_train.shape[1])} 

我们关注的主要度量标准是类别准确性,因为即使786个标签中有一个预测不正确,二进制准确性也无法通过预测。

为了便于进行可重复的实验,我们将最终的度量标准名称调整为可重复的(即val_precision_66变为val_precision,然后将我们跟踪的度量标准附加到pandas DataFrame日志末尾,我们既可以直观显示当前和先前运行的结果,还可以直观显示作出变更后两次运行之间的性能变化。

我们还想知道每次epoch的性能,那样我们不用训练数量过多的epoch。我们使用matplotlib绘制几个度量标准以及每次epoch的测试/训练损失。

最后,光了解理论性能还不够。我们需要在不同的置信度阈值下查看标记器的实际输出。我们为Stack Overflow问题、它们的实际标签以及我们预测的标准创建了一个DataFrame,以便我们直接演示模型及其实际性能。

该平台完美地运行本教程,我是指虽然它是新的,但已经适合实际的数据科学工作负载。

使DC/OSData Science Engine的设置实现自动化

这包括你如何手动使用平台,但本文关注的是PaaS自动化。那么我们如何加快速度呢?

DC/OS的图形用户界面和CLI共同使所有类型的用户都可以通过Data Science Engine轻松访问JupyterLab:非技术管理人员想在笔记本中查看报告,开发运维人员/数据工程师希望使流程实现自动化。如果手动GUI流程似乎很复杂,一旦我们拥有作为JSON文件的服务配置,仅用几行代码就可以使它实现自动化,为此通过Terraform命令启动DC/OS集群,从Terraform获得集群地址,然后使用DC/OS CLI对集群进行身份验证并运行服务。

DC/OS GUI提供了粘贴到外壳中的命令,以安装和配置CLI,我们使用CLI使集群和服务的设置实现自动化。

你可以使用GUI通过导出服务配置使设置实现自动化。

服务配置本身非常简单:

  1. json 
  2. "service": { 
  3. "name""data-science-engine"
  4. "cpus": 8, 
  5. "mem": 51200, 
  6. "gpu": { 
  7. "enabled"true
  8. "gpus": 1 

然后你只用一个命令即可安装服务:

  1. bash  
  2. dcos package install data-science-engine --options=data-science-engine-options.json 

如果光使用CLI实现全面的自动化,你可以创建集群,并启动Data Science Engine,仅用6个命令即可:

  1. bash 
  2. # Boot DC/OS Cluster 
  3. terraform init -upgrade 
  4. terraform plan -var-file desired_cluster_profile.tfvars -out plan.out 
  5. terraform apply plan.out 
  6.  
  7. # Get the cluster address from Terraform's JSON output 
  8. export CLUSTER_ADDRESS = `terraform output -json | jq -r '.["masters-ips"].value[0]'
  9.  
  10. # Authenticate CLI to Cluster using its address and Install the Data Science Engine Package 
  11. dcos cluster setup http://$CLUSTER_ADDRESS # add whatever arguments you need for automated authentication 
  12. dcos package install data-science-engine --options=data-science-engine-options.json 

这六个命令用于设置DC/OS集群,众多可用服务只需点击一下即可获得,包括可以运行Spark任务,并执行分布式Tensorflo训练的JupyterLab实例。这不赖!

结束语

总之,DC/OS Data Science Engine给我留下了深刻的印象。手动设置很容易,环境适合实际使用,结果证明自动化很容易。如果你想了解更多信息,请在此处查看全文,相应代码详见此处:github.com/rjurney/paas_blog

原文标题:Using DC/OS to Accelerate Data Science in the Enterprise,作者:Russell Jurney

【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】

【编辑推荐】

  1. 联通大数据连斩两枚大数据“星河奖” 参与发布两本白皮书
  2. 为啥Spark 的Broadcast要用单例模式
  3. InterSystems IRIS 数据平台通过AWS云应用商店认证
【责任编辑:未丽燕 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

订阅专栏+更多

CentOS 8 全新学习术

CentOS 8 全新学习术

CentOS 8 正式发布
共16章 | UbuntuServer

252人订阅学习

用Python玩转excel

用Python玩转excel

让重复操作傻瓜化
共3章 | DE8UG

222人订阅学习

AI入门级算法

AI入门级算法

算法常识
共22章 | 周萝卜123

191人订阅学习

读 书 +更多

SQL Server 2005奥秘

本书是作者深入研究SQL Server 2005数据库体系结构和内部机制的经验总结。 全书不拘泥于具体的管理操作,而是通过对存储的数据和日志文件...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊

51CTO服务号

51CTO官微