您好,登錄后才能下訂單哦!
來源:Redislabs
作者:Pieter Cailliau、LucaAntiga
翻譯:Kevin
簡介
今天我們發(fā)布了一個 RedisAI 的預覽版本,預集成了[tensor]werk組件。RedisAI 是一個可以服務 tensors 任務和執(zhí)行深度學習任務的 Redis 模塊。在這篇博客中,我們將介紹這個新模塊的功能,并解釋我們?yōu)槭裁磿J為它能顛覆機器學習(ML)、深度學習(DL)的解決方案。
RedisAI 的產生有兩大原因:首先,把數據遷移到執(zhí)行 AI 模型的主機上成本很高,并且對實時性的體驗很大的影響;其次,Serving 模型一直以來都是 AI 領域中 DevOps 的挑戰(zhàn)。我們構建 RedisAI 的目的,是讓用戶可以在不搬遷Redis 多節(jié)點數據的情況下,也能很好地服務、更新并集成自己的模型。
?
數據位置很重要
為了證明運行機器學習、深度學習模型中數據位置的重要性,我們舉一個聊天機器人的例子。聊天機器人通常使用遞歸神經網絡模型(RNN),來解決一對一(seq2seq)用戶問答場景。更高級的模型使用兩個輸入向量、兩個輸出向量,并以數字中間狀態(tài)向量的方式來保存對話的上下文。模型使用用戶最后的消息作為輸入,中間狀態(tài)代表對話的歷史,而它的輸出是對用戶消息和新中間狀態(tài)的響應。
為了支持用戶自定義的交互,這個中間狀態(tài)必須要保存在數據庫中,所以 Redis +RedisAI是一個非常好的選擇,這里將傳統(tǒng)方案和 RedisAI 方案做一個對比。
?
1、傳統(tǒng)方案
使用 Flask 應用或其它方案,集成 Spark 來構建一個聊天機器人。當收到用戶對話消息時,服務端需要從 Redis 中獲取到中間的狀態(tài)。因為在 Redis 中沒有原生的數據類型可用于 tensor,因此需要先進行反序列化,并且在運行遞歸神經網絡模型(RNN)之后,保證實時的中間狀態(tài)可以再序列化后保存到 Redis 中。
?
?考慮到 RNN 的時間復雜度,數據序列化/反序列化上 CPU 的開銷和巨大的網絡開銷,我們需要一個更優(yōu)的解決方案來保證用戶體驗。
?
2、RedisAI 方案
在 RedisAI 中,我們提供了一種叫 Tensor 的數據類型,只需使用一系列簡單的命令,即可在主流的客戶端中對 Tensor向量進行操作。同時,我們還為模型的運行時特性提供了另外兩種數據類型:Models 和 Scripts。
?
?Models 命令與運行的設備(CPU 或 GPU)和后端自定義的參數有關。RedisAI 內置了主流的機器學習框架,如 TensorFlow、Pytorch 等,并很快能夠支持 ONNX Runtime 框架,同時增加了對傳統(tǒng)機器學習模型的支持。然而,很棒的是,執(zhí)行 Model 的命令對其后端是不感知的:
AI.MODELRUN model_key INPUTS input_key1 … ?OUTPUTS output_key1 .. |
這允許用戶將后端選擇(通常由數據專家來決定)和應用服務解耦合開來,置換模型只需要設置一個新的鍵值即可,非常簡單。RedisAI 管理所有在模型處理隊列中的請求,并在單獨的線程中執(zhí)行,這樣保障了 Redis依然可以響應其它正常的請求。Scripts 命令可以在 CPU 或GPU 上執(zhí)行,并允許用戶使用 TorchScript 來操作Tensors 向量,TorchScript 是一個可操作 Tensors 向量的類 Python 自定義語言。這可以幫助用戶在執(zhí)行模型前對數據進行預處理,也可以用在對結果進行后處理的場景中,例如通過集成不同的模型來提高性能。
RedisAI 的數據類型和后端概覽
我們計劃未來通過 DAG 命令支持批量執(zhí)行命令,這會允許用戶在一個原子性操作中批量執(zhí)行多個 RedisAI 命令。例如在不同的設備上運行一個模型的不同實例,通過腳本對執(zhí)行結果做平均預測。使用 DAG 命令,就可并行地進行計算,再執(zhí)行聚合操作。如果需要全量且更深的特性列表,可以訪問 redisai.io。新的架構可以簡化為:
?
?
模型服務可以更簡單
在生產環(huán)境中,使用 Jupyter notebooks 來編寫代碼并將其部署在Flask 應用并不是最優(yōu)方案。用戶如何確定自己的資源是最佳的呢?如果用戶主機宕機之后,上述聊天機器人的中間狀態(tài)會發(fā)生什么呢?用戶可能會重復造輪子,實現(xiàn)已有的 Redis 功能來解決問題。另外,由于組合方案的復雜度往往超出預期,固執(zhí)地堅持原有的解決方案也會非常有挑戰(zhàn)性。RedisAI 通過 Redis 企業(yè)級的數據存儲方案,支持深度學習所需要的 Tensors、Models 和 Scripts等數據類型,很好的實現(xiàn)了 Redis 和 AI 模型的深度整合。如果需要擴展模型的計算能力,只需要簡單的對Redis 集群進行擴容即可,所以用戶可以在生產環(huán)境中增加盡可能多的模型,從而降低基礎設施成本和總體成本。最后,RedisAI 很好地適應了現(xiàn)有的 Redis 生態(tài),允許用戶執(zhí)行腳本來預處理、后處理用戶數據,可使用 RedisGear 對數據結構做正確的轉換,可使用RedisGraph 來保持數據處于最新的狀態(tài)。?
?
結論和后續(xù)計劃
1、短期內,我們希望使用RedisAI 在支持 3 種主流后端(Tensorflow、Pytorch 和 ONNX Runtime)的情況下,盡快穩(wěn)定下來并達到穩(wěn)定狀態(tài)。
2、我們希望可以動態(tài)加載這些后端,用戶可以自定義的加載指定的后端。例如,這將允許用戶使用Tensorflow Lite 處理邊緣用例。3、計劃實現(xiàn)自動調度功能,可以實現(xiàn)在同一模型中實現(xiàn)不同隊列的自動合并。4、RedisAI會統(tǒng)計模型的運行數據,用于衡量模型的執(zhí)行情況。
5、完成上文中解釋的DAG 特性。
?
更多優(yōu)質中間件技術資訊/原創(chuàng)/翻譯文章/資料/干貨,請關注“中間件小哥”公眾號!
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。