模型秒變API只需一行代碼,支持TensorFlow等框架

2021-02-20 Python數據科學
還在為機器學習模型打包成 API 發愁?這個工具能讓你一行代碼直接打包。專注於機器學習應用的人們知道,從訓練好的模型到實際的工業生產工具還有一定的距離。其中工作量很大的地方在於將模型打包,預留 API 接口,並和現有的生產系統相結合。近日,GitHub 上有了這樣一個項目,能夠讓用戶一行代碼將任意模型打包為 API。這一工具無疑能夠幫助開發者在實際的生產應用中快速部署模型。項目地址:https://github.com/cortexlabs/cortex該項目名為 Cortex,是一個命令行工具。作者表示,該項目具有以下優點:

自動定義:Cortex 可以自動定義需要負責生產工作的 API;

多框架支持:Cortex 支持多種機器學習框架,包括 TensorFlow、PyTorch、scikit-learn、XGBoost 等;

CPU/GPU 支持:Cortex 能夠在 CPU 或者 GPU 上進行推理工作;

回滾式更新:Cortex 可以對部署的 API 直接更新;

日誌流:Cortex 會保留部署模型的日誌流,並在 CLI 上顯示;

預測監控:Cortex 能夠監控網絡的評價指標,並追蹤預測結果;

最小配置:部署時,用戶只需要在一個名為 cortex.yaml 的文件中配置相關屬性。

這一項目是怎樣工作的?具體而言,每當用戶運行 cortex deploy 時,命令行將配置屬性和代碼發送到伺服器集群上。每個模型都載入到一個 Docker 容器中,包括相關的 Python 包和處理請求的代碼。模型通過網絡服務,如 Elastic Load Balancing (ELB)、Flask、TensorFlow Serving 和 ONNX Runtime 公開 API 給用戶使用。容器通過 Elastic Kubernetes Service (EKS) 進行控制,而日誌文件和評價指標的記錄和列印工作由 CloudWatch 完成。
# predictor.py
model = download_my_model()def predict(sample, metadata): return model.predict(sample["text"])

如上所示,用戶需要做的是定義代表這個 API 的函數,使其能夠根據輸入數據返回輸出。
# cortex.yaml
- kind: deploymentname: sentiment
- kind: apiname: classifierpredictor: path: predictor.pytracker: model_type: classificationcompute: gpu: 1

第二個步驟中,用戶需要創建一個新的 yaml 文件,這個文件用於配置相關屬性。具體而言,用戶可以定義部署模型的名稱,本例中名為 classifierpredictor。然後還需要定義 API 的名稱,如 classifierpredictor 以及路徑、模型的類型和使用的 GPU 數量等。
$ cortex deploy
creating classifier (http://***.amazonaws.com/sentiment/classifier)

以 AWS 為例,以上工作完成後,用戶可以創建這個 API,使其利用 AWS 進行工作。
$ curl http://***.amazonaws.com/sentiment/classifier \-X POST -H "Content-Type: application/json" \-d '{"text": "the movie was great!"}'
positive

$ cortex get classifier --watch
status up-to-date available requested last update avg latencylive 1 1 1 8s 123ms
class countpositive 8negative 4

為了讓用戶更好地使用這一工具,項目作者同時還提供了一些使用案例。包括:

基於 TensorFlow 和 BERT 進行情感分析:https://github.com/cortexlabs/cortex/tree/0.10/examples/tensorflow/sentiment-analysis

基於 TensorFlow 和 Inception 模型進行圖像分類:https://github.com/cortexlabs/cortex/tree/0.10/examples/tensorflow/image-classifier

基於 PyTorch 和 DistilGPT2 進行文本生成:https://github.com/cortexlabs/cortex/tree/0.10/examples/pytorch/text-generator

基於 XGBoost / ONNX 進行虹膜分類:https://github.com/cortexlabs/cortex/tree/0.10/examples/xgboost/iris-classifier

首先用戶需要在模型上定義 API 接口函數,使其可以通過函數輸入數據,並返回模型的推理結果。這一 py 文件被定義為 handler.py:
# handler.py
import tensorflow as tfimport tensorflow_hub as hubfrom bert import tokenization, run_classifier
labels = ["negative", "positive"]
with tf.Graph().as_default(): bert_module = hub.Module("https://tfhub.dev/google/bert_uncased_L-12_H-768_A-12/1") info = bert_module(signature="tokenization_info", as_dict=True)with tf.Session() as sess: vocab_file, do_lower_case = sess.run([info["vocab_file"], info["do_lower_case"]]) tokenizer = tokenization.FullTokenizer(vocab_file=vocab_file, do_lower_case=do_lower_case)

def pre_inference(sample, signature, metadata): input_example = run_classifier.InputExample(guid="", text_a=sample["review"], label=0) input_feature = run_classifier.convert_single_example(0, input_example, [0, 1], 128, tokenizer) return {"input_ids": [input_feature.input_ids]}

def post_inference(prediction, signature, metadata): return labels[prediction["labels"][0]]

接著,用戶需要定義配置 yaml 文件,在文件中指定相關屬性,這裡需要注意,文件名必須定義為 cortex.yaml:
# cortex.yaml
- kind: deployment name: sentiment
- kind: api name: classifier tensorflow: model: s3://cortex-examples/tensorflow/sentiment-analysis/bert request_handler: handler.py tracker: model_type: classification

從中可以看到,yaml 文件中需要指定出使用的模型,以及作為 API 接口的 py 文件(即第一步中定義了的 py 文件)。
$ cortex deploy
deployment started

如果需要獲得監控信息,則需要輸入 cortex get 命令:
$ cortex get classifier 
status up-to-date available requested last update avg latencylive 1 1 1 8s

$ cortex get classifier
url: http:
$ curl http: -X POST -H "Content-Type: application/json" \ -d '{"review": "The movie was great!"}'"positive

贈送三本噹噹熱銷書籍

《Halcon機器視覺算法原理與編程實戰》

👆掃描二維碼 2 秒 購買書籍

內容介紹:《Halcon機器視覺算法原理與編程實戰》適合需要全面學習機器視覺算法的初學者,希望掌握Halcon進行機器視覺項目開發的程式設計師,需要了解機器視覺項目開發方法的工業客戶、機器視覺軟體開發項目經理、專業培訓機構的學員,以及對機器視覺算法興趣濃厚的人員閱讀。

2、PyTorch中文版官方教程來了,附pdf下載

3、神作《統計學習要素》的中文翻譯、代碼實現及其習題解答,附下載

4、400頁《TensorFlow 2.0 深度學習算法實戰》中文版教材免費下載(附隨書代碼+pdf)

5、PDF&PPT下載 | Github 9.9K Star的《神經網絡與深度學習》

6、300 頁乾貨!李宏毅《一天搞懂深度學習》(附下載)

喜歡文章,點個在看

相關焦點

  • Tensorflow Object Detection API 終於支持tensorflow1.x與tensorflow2.x了
    基於tensorflow框架構建的快速對象檢測模型構建、訓練、部署框架,是針對計算機視覺領域對象檢測任務的深度學習框架。之前tensorflow2.x一直不支持該框架,最近Tensorflow Object Detection API框架最近更新了,同時支持tensorflow1.x與tensorflow2.x。
  • 一句代碼發布你的TensorFlow模型,簡明TensorFlow Serving上手教程
    一句代碼保存TensorFlow模型# coding=utf-8import tensorflow as tf# 模型版本號model_version = 1# 定義模型x = tf.placeholder(tf.float32, shape=[None, 4], name="x")
  • 教程 | 從零開始:TensorFlow機器學習模型快速部署指南
    如果你已使用 TensorFlow 或 Caffe 等深度學習框架訓練好了 ML 模型,該模型可以作為 demo。如果你更喜歡輕量級的解決方案,請閱讀本文。更典型的 ML 用例通常基於數百個圖像,這種情況我推薦大家對現有模型進行微調。例如,https://www.tensorflow.org/tutorials/image_retraining 頁面上有如何微調 ImageNet 模型對花樣本數據集(3647 張圖像,5 個類別)進行分類的教程。
  • 飛槳上線萬能轉換小工具,教你玩轉TensorFlow、Caffe等模型遷移
    但是從代碼的轉移談何容易,之前的工作重寫一遍不太現實,成千上萬行代碼的手工轉換等於是在做一次二次開發。現在,有個好消息:無論Caffe、TensorFlow、ONNX都可以輕鬆遷移到飛槳平臺上。雖然目前還不直接遷移PyTorch模型,但PyTorch本身支持導出為ONNX模型,等於間接對該平臺提供了支持。然而,有人還對存在疑惑:不同框架之間的API有沒有差異?
  • 乾貨 | tensorflow模型導出與OpenCV DNN中使用
    、實現圖像與視頻場景中的其模型導入與加載的相關API支持以下深度學習框架tensorflow - readNetFromTensorflowcaffe - readNetFromCaffepytorch - readNetFromTorchdarknet - readNetFromDarknetOpenCV3.4.1
  • TensorFlow 2.0 模型:模型類的建立
    不過,當模型變得日益複雜時,直接將模型代碼寫在主程序中就顯得臃腫且難以重用了。於是,我們希望有一個高層的模型類,能夠幫助我們將模型進行封裝。本篇文章即介紹模型類的建立方法。在 TensorFlow 中,推薦使用 Keras ( tf.keras ) 構建模型。Keras 是一個廣為流行的高級神經網絡 API,簡單、快速而不失靈活性,現已得到 TensorFlow 的官方內置和全面支持。
  • TensorFlow Lite 轉換器中的 TensorFlow 算子融合
    開箱即用的 RNN 轉換現在,我們支持將 Keras LSTM 和 Keras 雙向 LSTM 轉換為複合 TensorFlow 算子。如要獲取基於 RNN 的模型以利用 TensorFlow Lite 中的高效 LSTM 融合算子,這是最簡單的方式。
  • 使用 tfdbg 調試 TensorFlow 代碼
    通過這些信息可以辨識調試器中某個特定節點對應程序中代碼位置。為了提高辨識度,在程序中使用 tf api 構建 graph 時,最好加入 name 參數。通過 ls 命令可以查看創建節點的框架源碼:從上圖看到源碼和創建的節點統計值,滑鼠點擊源碼則自動跳轉到創建代碼處,適合跟蹤框架代碼。
  • TensorFlow 官方工具 TF-Coder,自動生成代碼
    項目地址:https://github.com/google-research/tensorflow-coderGoogle Colab 試用地址:https://colab.research.google.com/github/google-research/tensorflow-coder/blob/master/TF-Coder_Colab.ipynb
  • 正確的debug你的TensorFlow代碼(不用這麼痛苦)
    當討論在tensorflow上編寫代碼時,總是將其與PyTorch進行比較,討論框架有多複雜,以及為什麼要使用tf.contrib的某些部分,做得太爛了。此外,我認識很多數據科學家,他們只用Github上已有的repo來用tensorflow。對這個框架持這種態度的原因是非常不同的,但是今天讓我們關注更實際的問題:調試用tensorflow編寫的代碼並理解它的主要特性。核心抽象計算圖。
  • 編寫同時在PyTorch和Tensorflow上工作的代碼
    他們的新Python框架,急切地解決了它們的重新實現和代碼複製障礙。例如,Foolbox是一個構建在EagerPy之上的Python庫。該庫是用EagerPy而不是NumPy重寫的,以實現在PyTorch和TensorFlow中開發,並且只有一個代碼庫,沒有代碼重複。Foolbox是一個對機器學習模型進行對抗性攻擊的庫。
  • tensorflow極速入門
    tensorflow。最後給出了在 tensorflow 中建立一個機器學習模型步驟,並用一個手寫數字識別的例子進行演示。1、 tensorflow是什麼?tensorflow 是 google 開源的機器學習工具,在2015年11月其實現正式開源,開源協議Apache 2.0。
  • Tensorflow 2.0到底好在哪裡?
    「活用 TensorFlow 2.0 指南」(https://www.tensorflow.org/beta/guide/effective_tf2)則使用了高級別的 tf.kerasAPI 取代了舊的底層 API;這將大大減少你需要編寫的代碼量。你只需要每層寫一行代碼就能構建 Keras 神經網絡,如果能善用循環結構的話需要的代碼就更少了。
  • TensorFlow框架簡單介紹
    以下代碼給出了計算定義階段的樣例import tensorflow as tfa = tf.constant([1.0,2.0],name = "a")b = tf.constant([2.0,3.0],name = "b")result = a + b在這個過程中,TensorFlow會自動將定義的計算轉化為計算圖上的節點,可以通過tf.get_default_graph
  • TensorFlow Lite 微控制器
    它可以直接在「裸機」上運行,不需要作業系統支持、任何標準 C/C++ 庫和動態內存分配。核心運行時 (core runtime) 在 Cortex M3 上運行時僅需 16KB,加上足以用來運行語音關鍵字檢測模型的操作,也只需 22KB 的空間。要快速入門並運行 TensorFlow Lite for Microcontrollers,請閱讀微控制器入門。
  • 教程 | 如何使用TensorFlow API構建視頻物體識別系統
    TensorFlow Object Detection API 的代碼庫是一個建立在 TensorFlow 之上的開源框架,旨在為人們構建、訓練和部署目標檢測模型提供幫助。mAP 值越高就說明神經網絡的識別精確度越高,但代價是速度變慢。
  • TensorFlow應用實戰 | TensorFlow基礎知識
    dtypeTensorFlow.datatype listhttps://www.tensorflow.org/api_docs/python/tf/DType張量摘要用於導出關於模型的信息。官網的develop 中的get Started 裡面有關於TensorBoard的信息。開源的github原始碼。
  • Windows系統如何安裝Tensorflow Object Detection API
    什麼是Tensorflow Object Detection API基於tensorflow的一套高級訓練、檢測、可配置的API框架,支持多種預訓練模型檢測,自定義對象檢測、遷移學習等訓練。十分方便的模型構建、訓練、導出、部署框架,是針對計算機視覺的獨特而快速的解決方案框架大致可以分為如下三步1.
  • Lingvo:TensorFlow 序列建模框架
    圖 1:Lingvo 框架概覽,簡要展示了如何實例化和訓練模型,以及如何將模型導出以進行評估和部署在構建 Lingvo 時,我們秉持著協作研究的理念,通過在不同任務之間共享公共層的實現來提升代碼復用率。此外,所有層都採用相同的公共界面,並且以相同的方式布局。這不僅可以產生更簡潔易懂的代碼,還能讓您非常輕鬆地將其他開發者為其他任務所做的改進應用到您自己的任務上。
  • Tensorflow 免費中文視頻教程,開原始碼,免費書籍.
    Free-TensorflowTensorflow 免費中文視頻教程,開原始碼,免費書籍.