松原網主頁 > 資訊 > 正文 >

Streamlit,將Python腳本變成漂亮的機器學習工具!

2020-11-20 08:08:02 來源:互聯網 閱讀:-
【摘要】介紹Streamlit,這是專為ML工程師打造的應用程序框架Coding a semantic search engine with real-time neural-net inference in 300 lines of Python.

介紹Streamlit,這是專為ML工程師打造的應用程序框架

Streamlit,將Python腳本變成漂亮的機器學習工具

Coding a semantic search engine with real-time neural-net inference in 300 lines of Python.


以我的經驗,每個不平凡的機器學習項目最終都會用漏洞纏身且無法維護的內部工具組合在一起。 這些工具(通常是Jupyter Notebook和Flask應用程序的拼湊而成)難以部署,需要對客戶端-服務器架構進行推理,并且無法與Tensorflow GPU會話等機器學習工具很好地集成。

我先后在卡內基·梅隆大學(Carnegie Mellon),伯克利(Berkeley),谷歌X(Google X),以及后來在Zoox構建自動機器人時就看到了。 這些工具通常是在Jupyter筆記本電腦中誕生的:傳感器校準工具,模擬比較應用程序,LIDAR對準應用程序,場景重播工具等等。

隨著工具重要性的提高,項目經理介入了。過程開始發芽了, 要求開花結果。 這些單獨的項目孕育成腳本,并逐漸成為繁瑣的維護噩夢。

Streamlit,將Python腳本變成漂亮的機器學習工具

The machine learning engineers' ad-hoc app building flow.

當工具變得至關重要時,我們召集了工具團隊。 他們寫了流利的Vue和React前端。 他們在筆記本電腦上貼上聲明性框架的標簽。 他們有一個設計好的工作流:

Streamlit,將Python腳本變成漂亮的機器學習工具

The tools team's clean-slate app building flow.


太棒了,但是這些工具都需要新功能,例如每周一次。 工具團隊正在支持其他十個項目。 他們會說:"我們將在兩個月內再次更新您的工具。"

因此,我們回到了構建自己的工具,部署Flask應用程序,編寫HTML,CSS和JavaScript,以及嘗試對從筆記本到樣式表的所有內容進行版本控制的過程。 因此,我的Google X的老朋友Thiago Teixeira和我開始思考以下問題:我們該怎么才能使構建工具像編寫Python腳本一樣容易?

我們希望機器學習工程師無需工具團隊就能創建精美的應用程序。 這些內部工具應作為ML工作流程的自然副產品而出現。 編寫此類工具應該像在Jupyter中訓練神經網絡或執行即席分析一樣! 同時,我們希望保留功能強大的應用程序框架的所有靈活性。 我們想要創建工程師可以炫耀的,漂亮的,高性能的工具。 基本上,我們想要這樣:

Streamlit,將Python腳本變成漂亮的機器學習工具

The Streamlit app building flow.

我們擁有一個了不起的Beta社區,其中包括來自Uber,Twitter,Stitch Fix和Dropbox的工程師,我們工作了一年時間,為Stream ML創建了Streamlit,這是一個完全免費的開源應用程序框架。 對于每個原型,Streamlit的核心原理變得越來越簡單。 他們是:

#1:擁抱Python腳本。 Streamlit應用程序實際上只是從上到下運行的腳本。 沒有隱藏狀態。 您可以使用函數調用來分解代碼。 如果您知道如何編寫Python腳本,則可以編寫Streamlit應用程序。 例如,這是您寫入屏幕的方式:

import streamlit as st
st.write('Hello, world!')
Streamlit,將Python腳本變成漂亮的機器學習工具

Nice to meet you.


#2:將小部件視為變量。 Streamlit中沒有回調! 每次交互都只是從上到下重新運行腳本。 這種方法可以產生非常干凈的代碼:

import streamlit as st

x = st.slider('x')
st.write(x, 'squared is', x * x)
Streamlit,將Python腳本變成漂亮的機器學習工具

An interactive Streamlit app in three lines of code.


#3:重用數據和計算。 如果您下載大量數據或執行復雜的計算該怎么辦? 關鍵是跨運行安全地重用信息。 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,將Python腳本變成漂亮的機器學習工具

The output of running the st.cache example above.

簡而言之,Streamlit的工作方式如下:

· 對于每個用戶交互,整個腳本都是從頭開始運行的。

· Streamlit在給定小部件狀態的情況下為每個變量分配一個最新值。

· 緩存允許Streamlit跳過冗余數據獲取和計算。

或在圖片中:

Streamlit,將Python腳本變成漂亮的機器學習工具

User events trigger Streamlit to rerun the script from scratch. Only the cache persists across runs.

如果這聽起來很有趣,那么您可以立即嘗試! 只要運行以下代碼:

$ 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應用程序的Web瀏覽器。 如果沒有,只需單擊鏈接。

Streamlit,將Python腳本變成漂亮的機器學習工具

To see more examples like this fractal animation, run streamlit hello from the command line.




好。 你從分形玩回來了嗎? 這些可能會令人著迷。

這些想法的簡單性不會阻止您使用Streamlit創建令人難以置信的豐富實用的應用程序。 在Zoox和Google X期間,我看著無人駕駛汽車項目激增為數以十億計的視覺數據,需要對其進行搜索和理解,包括在圖像上運行模型以比較性能。 我見過的每個自動駕駛汽車項目最終都會讓整個團隊都在使用這種工具。

在Streamlit中構建這樣的工具很容易。 這個Streamlit演示使您可以在整個Udacity自動駕駛汽車照片數據集中執行語義搜索,可視化帶有人工注釋的地面真相標簽,并可以從應用程序內部實時運行完整的神經網絡(YOLO)[1]。

Streamlit,將Python腳本變成漂亮的機器學習工具

This 300-line Streamlit demo combines semantic visual search with interactive neural net inference.

整個應用程序是一個完全自包含的300行Python腳本,其中大多數是機器學習代碼。 實際上,整個應用程序中只有23個Streamlit調用。 您可以立即自己運行它!

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




在與機器學習團隊合作進行自己的項目時,我們意識到這些簡單的想法產生了許多重要的好處:

Streamlit應用程序是純Python文件。 因此,您可以在Streamlit中使用自己喜歡的編輯器和調試器。

Streamlit,將Python腳本變成漂亮的機器學習工具

My favorite layout for writing Streamlit apps has VSCode on the left and Chrome on the right.

純Python腳本可與Git和其他源代碼控制軟件無縫配合,包括提交,拉取請求,問題和注釋。 由于Streamlit的基礎語言是純Python,因此您可以免費獲得這些出色的協作工具的所有好處。

Streamlit,將Python腳本變成漂亮的機器學習工具

Because Streamlit apps are just Python scripts, you can easily version control them with Git.

Streamlit提供了即時模式實時編碼環境。 當Streamlit檢測到源文件更改時,只需單擊始終重新運行。

Streamlit,將Python腳本變成漂亮的機器學習工具

Click "Always rerun" to enable live coding.

緩存簡化了計算管道的設置。 令人驚訝的是,鏈接緩存的功能會自動創建高效的計算管道! 請考慮以下代碼,這些代碼是從我們的Udacity演示改編而成的:

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只會重新計算需要正確的答案的管道子集。 Cool!

Streamlit,將Python腳本變成漂亮的機器學習工具

To make apps performant, Streamlit only recomputes whatever is necessary to update the UI.

Streamlit是為GPU構建的。 Streamlit允許直接訪問機器級原語,例如TensorFlow和PyTorch,并補充了這些庫。 例如,在此演示中,Streamlit的緩存存儲了整個NVIDIA名人頭像GAN [2]。 當用戶更新滑塊時,這種方法幾乎可以實現瞬時推斷。

Streamlit,將Python腳本變成漂亮的機器學習工具

This Streamlit app demonstrates NVIDIA celebrity face GAN [2] model using Shaobo Guan's TL-GAN [3].

Streamlit是一個免費的開源庫,而不是專有的Web應用程序。 您可以在不與我們聯系的情況下在本地提供Streamlit應用程序。 您甚至可以在沒有Internet連接的筆記本電腦上本地運行Streamlit! 此外,現有項目可以逐步采用Streamlit。

Streamlit,將Python腳本變成漂亮的機器學習工具

Several ways incrementally adopt Streamlit. (Icons courtesy of fullvector / Freepik.)



這只是您使用Streamlit可以做的簡單的事情。 Streamlit最令人興奮的方面之一是如何將這些原語輕松地組合成看起來,變成像腳本一樣的復雜應用程序。 關于架構的工作原理和計劃的功能,我們還有很多話要說,但我們會保留下來,以備將來之用。

Streamlit,將Python腳本變成漂亮的機器學習工具

Block diagram of Streamlit's components. More coming soon!

我們很高興能最終與當今的社區共享Streamlit,并看到大家使用它構建的東西。 我們希望您會發現將Python腳本轉換為漂亮的ML應用變得輕松而愉快。




感謝Amanda Kelly,Thiago Teixeira,TC Ricks,Seth Weidman,Regan Carey,Beverly Treuille,GenevièveWachtell和Barney Pell在本文中提供的有益幫助。

參考文獻:

  1. [1] J. Redmon和A. Farhadi,YOLOv3:增量改進(2018),arXiv。
  2. [2] T. Karras,T。Aila,S。Laine和J. Lehtinen,《漸進式增長GAN以提高質量,穩定性和變異性》(2018年),ICLR。
  3. [3] S. Guan,《使用新型TL-GAN模型進行受控圖像合成和編輯》(2018年),Insight Data Science Blog。


(本文翻譯自Adrien Treuille的文章《Turn Python Scripts into Beautiful ML Tools》)

推薦閱讀:江西在線

手机麻将作弊管用吗 (*^▽^*)MG古墓丽影首页 (^ω^)MG急冻钻石奖金赔率 支付宝网赚项目资讯搜索 (★^O^★)MG超级888_破解版下载 吉林快三开奖号码走势图 网络彩票停售最新消息 香港惠泽一波中特 (^ω^)MG四象游戏规则 6场半全场14092期分析 彩票30选5开奖公告 河南22选5基本走势图百度 博格体育网-体育赛事资讯网站 (^ω^)MG太阳征程送彩金 彩票平台都在哪里找的 华东15选5走势图江苏 江西快3今天开奖