强大的项目-秒变 Python 脚本为 ML 工具

简介: 强大的项目-秒变 Python 脚本为 ML 工具

痛点


以我的经验来看,每一个不平凡的机器学习项目最终都会使用一个错漏百出的难以维护的内部工具进行缝合。而这些工具(通常是 Jupyter Notebook 或者 Flask App)往往都难以部署,通常需要对客户端和服务器架构进行整合,而且无法与 TesorFlow GPU 等机器学习框架进行很好的结合。


这些问题,我在卡内基-梅隆大学、伯克利、谷歌 X 和后来的 Zoox 构建自动化机器人时就发现了。这些工具通常都产生于 Jupyter Notebook 笔记本当中,例如:传感器校准工具、模型比较程序、LIDAR 校准程序和场景重播工具等等。


接下来慢慢随着项目的变迁,产品经理开始介入,一些独立的项目开始孕育成脚本,并逐渐成为了繁琐的难以维护的项目。

image.png

而当工具变得越来越重要时,就产生了工具团队,他们书写 Vue 或 React,并有一套自身的设计流程

image.png

现在看起来很棒!但是这些工具都是需要新功能的,比如每周一次更新。可是工具团队可能在同时支撑10个项目,他们也许会告诉你:“我们会在两个月内完成这个工具的更新。”


所以我们不得不再次回到自己构建工具的道路上,部署 Flask 程序,编写 HTML、CSS 和 JavaScript 代码,以及尝试对所有项目代码进行版本控制。所以我的朋友和我开始思考:如果我们能够使得构建工具像编写 Python 脚本那样容易,那该有多好?


我们的愿景是希望机器学习工程师在无需工具团队的情况下就能够创建出精美的工具应用程序。这些内部工具应该作为 ML 工作流程的自然产物出现,编写此类工具应该就像在 Jupyter Noebook 中训练神经网络一样简单。同时我们还希望保留功能强大的应用程序框架的灵活性,我们想要创建出工程师可以炫耀的,漂亮的,高性能的工具。基于以上,我们设想的流程如下:

image.png

现在我们已经拥有了一个了不起的 Beta 社区,包括了来自 Uber、Twitter、Stitch Fix 和 Dropbox 等知名企业的工程师。我们花费了一年的时间,为 Stream ML 创建了一个完全免费开源的应用程序框架 Streamlit。对于每个原型,Streamlit 的核心原理都很简单。


Streamlit 核心


拥抱 Python 脚本

Streamlit 应用程序实际上就是从上到下运行的脚本,它没有任何的隐藏状态,你也可以通过函数调用来分解代码。如果你知道如何编写 Python 脚本,那么你就可以轻松的编写 Streamlit 程序。例如:

import streamlit as st
st.write('Hello, world!')

image.png


视组件为变量

在 Streamlit 中是没有回调函数的,每一次交互都只是简单的从上至下运行脚本,这种方式可以产生非常干净的代码


import streamlit as st
x = st.slider('x')
st.write(x, 'squared is', x * x)

image.png


重用数据和计算

如果你需要大量的数据或需要复杂的计算怎么办?其关键就是跨运行安全的重用信息。Streamlit 引入了一种缓存机制,可以让 Streamlit 应用程序安全轻松的重用信息。比如下面的代码仅从 Udacity 自动驾驶项目下载一次数据,从而产生一个简单快速的应用程序

import streamlit as st
import pandas as pd
# Reuse this data across runs!
read_and_cache_csv = st.cache(pd.read_csv)
BUCKET = "https://streamlit-self-driving.s3-us-west-2.amazonaws.com/"
data = read_and_cache_csv(BUCKET + "labels.csv.gz", nrows=1000)
desired_label = st.selectbox('Filter to:', ['car', 'truck'])
st.write(data[data.label == desired_label])

image.png

简而言之,Streamlit 的工作流程如下:

1. 对于每个用户的交互行为,整个脚本都是从头开始执行的

2. 在给定组件状态的情况下,为每个变量分配一个新值

3. 缓存允许 Streamlit 跳过冗余的数据获取和计算

image.png


开始使用


如果这些听起来很有趣,那么下面就可以立即尝试下了


$ pip install --upgrade streamlit
$ streamlit hello
   You can now view your Streamlit app in your browser.
   Local URL: http://localhost:8501
   Network URL: http://10.0.1.29:8501


这个命令会自动通过本地浏览器打开 Streamlit 程序,如果没有,那么需要手动输入。

image.png

OK,你从模型的游戏中回来了吗,这些可能会令人着迷。

在 Streamlit 中构建这样的工具是非常容易的。在这个演示 Streamlit 程序中,你可以在整个 Udacity 无人驾驶汽车照片数据集中执行语义搜索,可视化带有人工标注的地面标签,并从应用程序中实时运行完整的神经网络。

image.png

整个应用程序是一个完全自包含的300行 Python脚本,其中大多数都是机器学习代码。实际上,整个程序中,只有23个 Streamlit 的调用,可以使用如下命令运行这个演示示例

$ pip install --upgrade streamlit opencv-python
$ streamlit run
https://raw.githubusercontent.com/streamlit/demo-self-driving/master/app.py


Streamlit 的优点

1. Streamlit 是纯 Python 文件,正因为如此,你可以在 Streamlit 中使用任何你喜欢的编辑器和调试器。

image.png

2. 与 Git 或其他代码控制软件无缝配合。

image.png

3. Streamlit 提供了实时编辑模式,当 Streamlit 检测到源文件有修改时,只需要单击重新运行按钮,就可以加载最新的文件代码

image.png

4. 缓存简化了计算管道的设置,缓存的功能会自动创建高效的计算管道。


import streamlit as st
import pandas as pd
@st.cache
def load_metadata():
    DATA_URL = "https://streamlit-self-driving.s3-us-west-2.amazonaws.com/labels.csv.gz"
    return pd.read_csv(DATA_URL, nrows=1000)
@st.cache
def create_summary(metadata, summary_type):
    one_hot_encoded = pd.get_dummies(metadata[["frame", "label"]], columns=["label"])
    return getattr(one_hot_encoded.groupby(["frame"]), summary_type)()
# Piping one st.cache function into another forms a computation DAG.
summary_type = st.selectbox("Type of summary:", ["sum", "any"])
metadata = load_metadata()
summary = create_summary(metadata, summary_type)
st.write('## Metadata', metadata, '## Summary', summary)

事实上,所谓的管道就是 load_metadata -> create_summary。每次运行脚本,Streamlit 都会重新计算需要正确答案的管道子集。

image.png

5. Streamlit 是为 GPU 而创建的,Streamlit 允许直接访问机器级别原语,例如:TensorFlow 和 PyTorch,并做了相应补充。


在示例中,Streamlit 缓存了整个 NVIDIA 的名人头像,当用户更新滑动块时,就可以实现瞬时推断

image.png

6. Streamlit 是一个免费的开源库,而不是一个专门的 web 程序。你可以在自己本地轻松的运行 Streamlit,并且可以逐步把老的项目切换至 Streamlit

image.png

很高兴能够与社区一起共享 Streamlit,并看到大家使用它来构建新的东西。我们也希望你能够在将 Python 脚本转换为 ML 应用中找到应有的快乐。

相关文章
|
2月前
|
安全 网络安全 文件存储
思科设备巡检命令Python脚本大集合
【10月更文挑战第18天】
78 1
思科设备巡检命令Python脚本大集合
|
9天前
|
数据采集 监控 数据挖掘
Python自动化脚本:高效办公新助手###
本文将带你走进Python自动化脚本的奇妙世界,探索其在提升办公效率中的强大潜力。随着信息技术的飞速发展,重复性工作逐渐被自动化工具取代。Python作为一门简洁而强大的编程语言,凭借其丰富的库支持和易学易用的特点,成为编写自动化脚本的首选。无论是数据处理、文件管理还是网页爬虫,Python都能游刃有余地完成任务,极大地减轻了人工操作的负担。接下来,让我们一起领略Python自动化脚本的魅力,开启高效办公的新篇章。 ###
|
1月前
|
关系型数据库 MySQL 数据库连接
python脚本:连接数据库,检查直播流是否可用
【10月更文挑战第13天】本脚本使用 `mysql-connector-python` 连接MySQL数据库,检查 `live_streams` 表中每个直播流URL的可用性。通过 `requests` 库发送HTTP请求,输出每个URL的检查结果。需安装 `mysql-connector-python` 和 `requests` 库,并配置数据库连接参数。
126 68
|
7天前
|
监控 数据挖掘 数据安全/隐私保护
Python脚本:自动化下载视频的日志记录
Python脚本:自动化下载视频的日志记录
|
13天前
|
JavaScript 前端开发 开发者
探索 DrissionPage: 强大的Python网页自动化工具
DrissionPage 是一个基于 Python 的网页自动化工具,结合了浏览器自动化的便利性和 requests 库的高效率。它提供三种页面对象:ChromiumPage、WebPage 和 SessionPage,分别适用于不同的使用场景,帮助开发者高效完成网页自动化任务。
64 4
|
17天前
|
存储 Python
Python自动化脚本编写指南
【10月更文挑战第38天】本文旨在为初学者提供一条清晰的路径,通过Python实现日常任务的自动化。我们将从基础语法讲起,逐步引导读者理解如何将代码块组合成有效脚本,并探讨常见错误及调试技巧。文章不仅涉及理论知识,还包括实际案例分析,帮助读者快速入门并提升编程能力。
49 2
|
19天前
|
运维 监控 Python
自动化运维:使用Python脚本简化日常任务
【10月更文挑战第36天】在数字化时代,运维工作的效率和准确性成为企业竞争力的关键。本文将介绍如何通过编写Python脚本来自动化日常的运维任务,不仅提高工作效率,还能降低人为错误的风险。从基础的文件操作到进阶的网络管理,我们将一步步展示Python在自动化运维中的应用,并分享实用的代码示例,帮助读者快速掌握自动化运维的核心技能。
34 3
|
24天前
|
缓存 运维 NoSQL
python常见运维脚本_Python运维常用脚本
python常见运维脚本_Python运维常用脚本
27 3
|
24天前
|
数据采集 JSON 数据安全/隐私保护
Python常用脚本集锦
Python常用脚本集锦
20 2
|
25天前
|
运维 监控 应用服务中间件
自动化运维:如何利用Python脚本提升工作效率
【10月更文挑战第30天】在快节奏的IT行业中,自动化运维已成为提升工作效率和减少人为错误的关键技术。本文将介绍如何使用Python编写简单的自动化脚本,以实现日常运维任务的自动化。通过实际案例,我们将展示如何用Python脚本简化服务器管理、批量配置更新以及监控系统性能等任务。文章不仅提供代码示例,还将深入探讨自动化运维背后的理念,帮助读者理解并应用这一技术来优化他们的工作流程。