Kubeflow实战系列:阿里云上使用JupyterHub

简介: 介绍 本系列将介绍如何在阿里云容器服务上运行Kubeflow, 本文介绍如何使用Jupyter Hub。 背景介绍 时间过得真快,李世乭和AlphaGo的人机对弈已经是两年前的事情。在过去的两年中,人工智能开始从学术界向工业界转型,基于人工智能技术的产品化落地和工业界方案的探索正如火如荼的进行。

介绍

本系列将介绍如何在阿里云容器服务上运行Kubeflow, 本文介绍如何使用Jupyter Hub。

背景介绍

时间过得真快,李世乭和AlphaGo的人机对弈已经是两年前的事情。在过去的两年中,人工智能开始从学术界向工业界转型,基于人工智能技术的产品化落地和工业界方案的探索正如火如荼的进行。而随着计算和数据的规模化,机器学习模型持续迭代的常态化,人们意识到过去实验室里的手工作坊式的做法已经无法应对新的变化。

kubeflow.png

而Kubernetes作为基于容器技术的云平台,正在悄然的改变大规模部署和应用程序管理的行业标准,越来越多的企业开始使用Kubernetes来部署和运维自己的应用。虽然Kubernetes最擅长解决的是无状态服务生命周期管理,但是越来越多的其他类型的工作负载也在开始向这个平台迁移,目的在于利用Kubernetes平台本身的API,可靠性和生命周期管理能力。

而最近新兴的Kubeflow社区,就是利用Kubernetes将大规模机器学习变得模块化,可迁移和易扩展。

Kubeflow介绍

Kubeflow致力于利用Kubernetes将机器学习(ML)工作流程的部署变得简单,便携和可扩展。其目标不是重新创建其他服务,而是提供一种直接的方式将机器学习的最佳开源系统部署到各种基础架构中。 在运行Kubernetes的任何地方,都应该可以运行Kubeflow。该项目一直在不断的演进和丰富之中,目前主要包含的模块:

  • JupyterHub创建和管理交互式Jupyter笔记本。 Jupyter本身支持跨所有编程语言的交互式数据科学和科学计算。
  • TensorFlow训练管理控制器,可以配置使用CPU或者GPU,并且动态调整训练集群的规模
  • TensorFlow服务将训练好的模型以grpc和REST的方式提供API调用

Kubeflow分别支持本地部署模式和云平台部署,阿里云Kubernetes容器服务针对于KubeFlow做了本地化的定制,方便您在阿里云上运行Kubeflow方案。

部署阿里云Kubernetes容器服务,并且选择GPU类型

具体参考创建GPU集群

部署Kubeflow

安装ksonnet

Kubeflow 利用 ksonnet 打包和部署其组件。

首先,安装ksonnet版本 0.9.2

# curl -o ks_0.9.2_linux_amd64.tar.gz http://kubeflow.oss-cn-beijing.aliyuncs.com/ks_0.9.2_linux_amd64.tar.gz
# tar -xvf ks_0.9.2_linux_amd64.tar.gz
# cp ks_0.9.2_linux_amd64/ks /usr/local/bin/
# ks version

准备Github Token

  • 登录https://github.com/settings/tokens创建token。你无须提供任何权限给这个token
  • 请保存好该token,因为你无法再查看到这个token。如果没有记录好token,你就只能重现创建一个新的token
  • 可以将该token保存到shell启动脚本中,比如
echo "export GITHUB_TOKEN=${GITHUB_TOKEN}" >> ~/.bashrc
export GITHUB_TOKEN=${GITHUB_TOKEN}

该问题是ksonnet的限制:可以参考文档github-rate-limiting-errors了解其中的细节。

安装Kubeflow

# 创建Kubeflow运行的namespace
NAMESPACE=kubeflow
kubectl create namespace ${NAMESPACE}

# 指定特有版本
VERSION=jupyterhub-alibaba-cloud

# 初始化Kubeflow应用,并且将其namespace设置为default环境
APP_NAME=my-kubeflow
ks init ${APP_NAME} --api-spec=version:v1.9.3
cd ${APP_NAME}
ks env set default --namespace ${NAMESPACE}

# 安装 Kubeflow 模块
ks registry add kubeflow github.com/cheyang/kubeflow/tree/${VERSION}/kubeflow
ks registry list

ks pkg install kubeflow/core@${VERSION}
ks pkg install kubeflow/tf-serving@${VERSION}
ks pkg install kubeflow/tf-job@${VERSION}

# 创建核心模块的模板
ks generate kubeflow-core kubeflow-core

# 支持运行在阿里云Kubernetes容器服务
ks param set kubeflow-core cloud ack

ks param set kubeflow-core jupyterHubImage registry.aliyuncs.com/kubeflow-images-public/jupyterhub-k8s:1.0.1
ks param set kubeflow-core tfJobImage registry.cn-hangzhou.aliyuncs.com/kubeflow-images-public/tf_operator:v20180326-6214e560
ks param set kubeflow-core tfAmbassadorImage registry.aliyuncs.com/datawire/ambassador:0.34.0
ks param set kubeflow-core tfStatsdImage registry.aliyuncs.com/datawire/statsd:0.34.0

ks param set kubeflow-core jupyterNotebookRegistry registry.aliyuncs.com
ks param set kubeflow-core JupyterNotebookRepoName kubeflow-images-public

# 这里为了使用简单,将服务以LoadBalancer的方式暴露,这样可以直接通过阿里云SLB的ip访问。
ks param set kubeflow-core jupyterHubServiceType LoadBalancer
ks param set kubeflow-core tfAmbassadorServiceType LoadBalancer
ks param set kubeflow-core tfJobUiServiceType LoadBalancer


# 部署KubeFlow
ks apply default -c kubeflow-core

验证部署

查看相关的Pod是否处于Running状态

# kubectl get po -n kubeflow
NAME                                READY     STATUS    RESTARTS   AGE
ambassador-58f64cb77-9cqq2          2/2       Running   0          3h
ambassador-58f64cb77-fqn8x          2/2       Running   0          3h
ambassador-58f64cb77-g8pb6          2/2       Running   0          3h
centraldashboard-648d5f56d9-xp9c8   1/1       Running   0          3h
tf-hub-0                            1/1       Running   0          3h
tf-job-dashboard-759c7d4dd-6mj2j    1/1       Running   0          3h
tf-job-operator-7684bcf66b-qqvt8    1/1       Running   0          3h

体验Jupyter Hub

1. 可以通过kubectl命令查看Jupyter Hub的外网访问ip, 在本例子里,外网ip为101.37.178.121

# kubectl get svc -n kubeflow tf-hub-lb
NAME        TYPE           CLUSTER-IP    EXTERNAL-IP      PORT(S)        AGE
tf-hub-lb   LoadBalancer   172.19.3.22   101.37.178.121   80:32373/TCP   4h

注意由于Kubeflow的Jupyter Hub目前仅仅提供http访问,并不推荐在生产环境使用LoadBalancer模式的Service,建议在生产环境,可以使用kubectl proxy的模式访问

2. 通过外网ip访问Jupyter Hub, 默认没有提供认证插件,可以通过任何用户名和密码登录

jupyterhub_1.jpg

3. 点击Start My Server创建Jupyter Notebook

jupyterhub_2.jpg

4. 可以从下拉框里,选择不同版本TensorFlow的Jupyter Notebook(1.4.1,1.5.1,1.6.0, 1.7.0), 这里的地址都是阿里云容器镜像的地址,无需担心镜像下拉失败的问题。如果要使用一块GPU卡,请在Extera Resource Limits填入{"nvidia.com/gpu":"1"}, 点击Spwan:

jupyterhub_3.jpg

5. 这时可以看到启动页面一直处于加载状态,这是由于Jupyter Notebook的镜像通常很大,下载时间较长。

jupyterhub_4.jpg

6. 当Jupyter Notebook启动完成后,就会完成自动跳转.这时候可以从下拉框选择Terminal, 并且点击

jupyterhub_5.jpg

7. 可以在Terminal执行nvidia smi, 可以看到当前环境是P100的单卡

jupyterhub_6.jpg

8. 可以通过http://{ip}/user/{user}/tree返回到Jupyter主页, 从下拉框选择python 3,并且点击

jupyterhub_7.jpg

9. 运行简单的mnist softmas测试

jupyterhub_8.jpg

以下为测试代码:

from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)

import tensorflow as tf

x = tf.placeholder(tf.float32, [None, 784])

W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))

y = tf.nn.softmax(tf.matmul(x, W) + b)

y_ = tf.placeholder(tf.float32, [None, 10])
cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), reduction_indices=[1]))

train_step = tf.train.GradientDescentOptimizer(0.05).minimize(cross_entropy)

sess = tf.InteractiveSession()
tf.global_variables_initializer().run()

for _ in range(1000):
  batch_xs, batch_ys = mnist.train.next_batch(100)
  sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})

correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
print(sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels}))

删除Kubeflow

# ks delete default -c kubeflow-core
# kubectl delete ns kubeflow

总结

为了方便阿里云的用户学习和使用Kubeflow, 阿里云Kubernetes容器服务提供了本地化运行的方案。当然Kubeflow目前还不够成熟,但是它的社区热度和演进速度还是让人充满了期待;我们会进一步加强Kubeflow和阿里云自身负载均衡,存储和认证机制相结合,进一步降低在阿里云使用Kubernetes上的机器学习栈的难度。

相关实践学习
使用ACS算力快速搭建生成式会话应用
阿里云容器计算服务 ACS(Container Compute Service)以Kubernetes为使用界面,采用Serverless形态提供弹性的算力资源,使您轻松高效运行容器应用。本文将指导您如何通过ACS控制台及ACS集群证书在ACS集群中快速部署并公开一个容器化生成式AI会话应用,并监控应用的运行情况。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
Kubernetes TensorFlow 算法框架/工具
Kubeflow 使用指南
Kubeflow(https://github.com/kubeflow)是基于Kubernetes(https://kubernets.io,容器编排与管理服务软件)和TensorFlow(https://tensorflow.org,深度学习库)的机器学习流程工具,使用Ksonnet进行应用包的管理。
14129 0
|
Kubernetes Linux API
[没接触过kubevirt?]15分钟快速入门kubevirt
什么是kubevirt? kubevirt是一个容器方式运行虚拟机的项目。`kubevirt`是附加`kubernetes`集群上的,它是通过 `CustomResourceDefinition(CRD)`部署到`Kubernetes API`变成资源对象。使用方式类似创建`deploy、pod`......这些资源清单。
6079 0
[没接触过kubevirt?]15分钟快速入门kubevirt
|
2月前
|
人工智能 自然语言处理 API
AI 变身股票分析师!OpenClaw阿里云/本地部署+集成股票 Skill,一键获取A股行情与潜力股推荐
OpenClaw(昵称“大龙虾”)的核心优势在于“既有AI的大脑,又有干活的双手”——它不仅能理解自然语言指令,更能通过Skill(技能)插件执行具体任务。对投资者而言,Stock-Analysis技能的出现彻底改变了传统股票分析模式:无需手动抓取数据、无需编写复杂脚本,仅需一句自然语言指令,就能让AI完成实时行情分析、板块筛选、潜力股推荐、早盘报告生成等专业操作,将原本需要数小时的分析工作压缩至分钟级。
5138 0
|
7月前
|
存储 人工智能 缓存
运维智能体(SRE Agent)技术分级能力要求
本标准规范了运维智能体在场景应用、协同能力、能力建设及底座构建方面的技术要求,适用于公共与私有环境下的服务与产品。依据AI技术发展,定义了从初始级到优秀级的三级能力框架,涵盖感知、控制、行动等核心能力,推动运维智能化升级。
运维智能体(SRE Agent)技术分级能力要求
|
7月前
|
JSON 监控 API
从0到1掌握京东API:商品详情获取技巧与避坑指南
京东商品详情API提供商品基础信息、实时价格、SKU规格等120+字段,支持价格监控与竞品分析。采用HTTPS协议,响应延迟≤30秒,具备高并发能力,适用于电商数据应用。
|
机器学习/深度学习 Kubernetes 监控
Jupyter 集群管理:大规模部署的最佳策略
【8月更文第29天】当涉及大规模部署 Jupyter 笔记本服务器时,组织通常需要考虑如何有效地管理这些资源,以便支持多用户、高可用性和高性能的需求。Jupyter 集群管理不仅关乎于提供一个稳定的开发环境,还涉及到安全性、可扩展性和资源优化等问题。
801 1
|
机器学习/深度学习 人工智能 并行计算
NotaGen:中央音乐学院联合清华推出AI音乐生成模型,古典乐谱一键生成,音乐性接近人类!
NotaGen 是由中央音乐学院、北京航空航天大学、清华大学等机构联合推出的音乐生成模型,基于模仿大型语言模型的训练范式,能够生成高质量的古典乐谱。该模型通过预训练、微调和强化学习相结合的方式,显著提升了符号音乐生成的艺术性和可控性。
1483 15
NotaGen:中央音乐学院联合清华推出AI音乐生成模型,古典乐谱一键生成,音乐性接近人类!
|
运维 Serverless 云计算
解锁协作与创新的钥匙:计算巢&JupyterHub 引领数据驱动新时代
在这个数字化转型的时代,JupyterHub 为教育、研究和企业提供了一种强大且灵活的解决方案,帮助团队和个人高效地协作和探索数据。无论您是数据科学家、教育工作者还是开发团队的一员,JupyterHub 都能通过其无与伦比的功能和易用性提升您的生产力和创新能力。计算巢提供
|
存储 Ubuntu 搜索推荐
构建多用户的 Jupyter 服务器 —— 利用 JupyterHub
【8月更文第29天】**摘要** JupyterHub 是一个易于使用的、可伸缩的、多用户的 Jupyter Notebook 服务器。它允许您在一个集中式服务器上托管多个独立的 Jupyter Notebook 会话,非常适合团队协作和教学环境。本文将详细介绍如何安装和配置 JupyterHub,以及如何利用它来构建一个多用户 Jupyter 服务器环境。
5657 0
|
机器学习/深度学习 人工智能 自然语言处理
深度学习的突破与挑战:探索未来技术前沿
本文深入探讨了深度学习领域的最新进展、面临的主要挑战以及未来的发展趋势。文章首先介绍了深度学习的基本概念和应用领域,然后详细分析了当前深度学习技术的关键问题,包括数据依赖性、模型泛化能力、计算资源需求等。最后,文章展望了深度学习的未来发展方向,如模型可解释性、小样本学习、跨模态学习等,旨在为读者提供对深度学习领域全面而深入的理解。

热门文章

最新文章