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

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

痛点


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


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


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

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

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


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


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

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

Streamlit 核心



拥抱 Python 脚本



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

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



视组件为变量



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


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




重用数据和计算



如果你需要大量的数据或需要复杂的计算怎么办?其关键就是跨运行安全的重用信息。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])

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

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

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

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

开始使用

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


$ 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 程序,如果没有,那么需要手动输入。

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


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




整个应用程序是一个完全自包含的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 中使用任何你喜欢的编辑器和调试器。



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

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


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 都会重新计算需要正确答案的管道子集。



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


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



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

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


原文地址:https://towardsdatascience.com/coding-ml-tools-like-you-code-ml-models-ddba3357eace

相关文章
|
2月前
|
存储 缓存 测试技术
理解Python装饰器:简化代码的强大工具
理解Python装饰器:简化代码的强大工具
|
3月前
|
JSON 算法 API
深度分析小红书城API接口,用Python脚本实现
小红书作为以UGC内容为核心的生活方式平台,其非官方API主要通过移动端抓包解析获得,涵盖内容推荐、搜索、笔记详情、用户信息和互动操作等功能。本文分析了其接口体系、认证机制及请求规范,并提供基于Python的调用框架,涉及签名生成、登录态管理与数据解析。需注意非官方接口存在稳定性与合规风险,使用时应遵守平台协议及法律法规。
|
3月前
|
JSON API 数据安全/隐私保护
【干货满满】分享微店API接口到手价,用python脚本实现
微店作为知名社交电商平台,其开放平台提供商品查询、订单管理等API接口。本文介绍如何通过微店API获取商品到手价(含优惠、券等),涵盖认证机制、Python实现及关键说明。
|
3月前
|
JSON API 数据格式
深度分析大麦网API接口,用Python脚本实现
大麦网为国内领先演出票务平台,提供演唱会、话剧、体育赛事等票务服务。本文基于抓包分析其非官方接口,并提供Python调用方案,涵盖演出列表查询、详情获取及城市列表获取。需注意非官方接口存在稳定性风险,使用时应遵守平台规则,控制请求频率,防范封禁与法律风险。适用于个人学习、演出信息监控等场景。
|
3月前
|
程序员 测试技术 开发者
Python装饰器:简化代码的强大工具
Python装饰器:简化代码的强大工具
206 92
|
2月前
|
异构计算 Python
ERROR: pip’s dependency resolver does not currently take into 报错-Python项目依赖冲突的解决方案-优雅草优雅草卓伊凡
ERROR: pip’s dependency resolver does not currently take into 报错-Python项目依赖冲突的解决方案-优雅草优雅草卓伊凡
292 1
|
2月前
|
机器学习/深度学习 编解码 Python
Python图片上采样工具 - RealESRGANer
Real-ESRGAN基于深度学习实现图像超分辨率放大,有效改善传统PIL缩放的模糊问题。支持多种模型版本,推荐使用魔搭社区提供的预训练模型,适用于将小图高质量放大至大图,放大倍率越低效果越佳。
225 3
|
2月前
|
API 语音技术 开发者
Python 项目打包,并上传到 PyPI,分享项目
本文介绍了如何使用 Poetry 打包并发布一个 Python 项目至 PyPI。内容包括:项目创建、配置 `pyproject.toml` 文件、构建软件包、上传至 PyPI、安装与使用。通过实例 iGTTS 展示了从开发到发布的完整流程,帮助开发者快速分享自己的 Python 工具。
|
2月前
|
人工智能 Shell Python
ERROR: pip’s dependency resolver does not currently take into 报错-Python项目依赖冲突的解决方案-优雅草优雅草卓伊凡
ERROR: pip’s dependency resolver does not currently take into 报错-Python项目依赖冲突的解决方案-优雅草优雅草卓伊凡
202 0
|
3月前
|
人工智能 自然语言处理 安全
Python构建MCP服务器:从工具封装到AI集成的全流程实践
MCP协议为AI提供标准化工具调用接口,助力模型高效操作现实世界。
694 1

推荐镜像

更多