NVIDIA Jarvis:一個GPU加速對話人工智能應用的框架
Introducing NVIDIA Jarvis: A Framework for GPU-Accelerated Conversational AI Applications
實時會話人工智能是一項復雜而富有挑戰性的任務。為了允許與最終用戶進行實時、自然的交互,模型需要在300毫秒內完成計算。自然的相互作用具有挑戰性,需要多模態的感覺整合。模型管道也很復雜,需要跨多個服務進行協調:
自動語音識別(ASR)
自然語言理解(NLU)
特定於域的實現服務
文本到語音(TTS)
今天,發布了NVIDIA Jarvis,一個用於構建對話式人工智能應用程序的端到端框架。包括針對ASR、NLU、TTS和計算機視覺的GPU優化服務,這些服務使用最先進的深度學習模型。
可以將這些技能結合起來,在應用程序中形成多模式技能。可以對數據集上的服務和模型進行微調,以使用NVIDIA NeMo獲得盡可能高的精度。還可以使用NVIDIA AI工具包中的其工具來優化和構建可以大規模運行的服務。
Jarvis旨在幫助輕松快速地訪問對話式人工智能功能。通過幾個命令,可以通過API操作訪問高性能服務並嘗試多模式演示。
Jarvis framework
Jarvis是一個完全加速的應用程序框架,用於構建使用端到端深度學習管道的多模式會話人工智能服務(圖1)。
Jarvis框架包括預先訓練的會話人工智能模型、工具,以及針對語音、視覺和NLU任務的優化端到端服務。除了人工智能服務外,Jarvis還允許同時融合視覺、音頻和其傳感器輸入,以在虛擬助理、多用戶二值化和呼叫中心助理等應用程序中提供多用戶、多上下文對話等功能。
使用Jarvis,可以很容易地微調數據上的最新模型,以便更深入地理解特定上下文。優化推理以提供在150毫秒內運行的實時服務,而在純CPU平台上則需要25秒。
Figure 1. Jarvis is a platform for multimodal conversation AI development and deployment at scale.
特定於任務的人工智能服務和gRPC端點提供開箱即用、高性能ASR、NLU、文本到語音(TTS)和廣泛的計算機視覺人工智能服務。所有這些人工智能服務都經過數千小時的公共和內部數據集訓練,以達到高精度。可以開始使用預先訓練的模型,或者使用自己的數據集對進行微調,以進一步提高模型性能
另一個主要組件是Jarvis Core,是一個設計用於創建復雜的、多模式的、對話式人工智能應用程序的組件。包括Jarvis對話管理器,負責以下任務:
多用戶會話中的上下文切換
對話狀態跟蹤
使用實現引擎處理用戶請求
Jarvis NLP服務返回的域、意圖和實體用作對話框管理器的輸入,該對話框管理器輸出下一個要執行的操作和文本響應。對話框管理器與實現引擎緊密協作,后者負責檢索特定於域的信息以滿足用戶查詢並執行用戶請求的命令。
圖2顯示了可用的三個主要構建塊。
Figure 2. Jarvis components: Multimodal Skills, Core Components, basic services.
Jarvis Core還提供傳感器管理和多模式融合等構建塊,幫助管理同步不同傳感器輸入流以及啟動人工智能服務的不同時間的復雜挑戰。
多模式技能組件將特定於任務的服務組合起來,形成復雜的多模式服務。所有多模式應用程序都可以寫在計算圖中,每個節點都是一個人工智能服務。
Jarvis利用Triton為多個模型提供高效和健壯的資源分配,並在高吞吐量、低延遲和高精度方面實現高性能。
Jarvis services
為了充分利用GPU的計算能力,Jarvis基於Triton為神經網絡和集成管道提供服務,這些管道在TensorRT中高效運行。
Jarvis提供的服務是通過API操作公開的,這些API操作可以使用gRPC端點進行訪問,這些端點還向應用程序開發人員隱藏了所有的復雜性。
圖3顯示了服務器端的系統外觀。gRPC API操作由負責處理所有計算機視覺、語音和自然語言處理傳入和傳出數據的API服務器(運行在Docker容器中)公開。
Figure 3. Jarvis services include multiple pipelines.
API服務器向Triton發送推斷請求並接收結果。
Triton是在多個gpu上同時處理多個神經網絡或集成管道的多個推理請求的后端服務器。
對於會話人工智能應用程序,將延遲保持在給定的閾值以下是很重要的。這通常轉化為推理請求一到達就執行。要使GPU飽和並提高性能,必須增加批大小並延遲推理執行,直到收到更多請求並形成更大的批。
Triton還負責在一個請求和另一個請求之間切換網絡的上下文。
Jarvis可以通過從NVIDIA NGC下載合適的模型和容器的簡單腳本直接安裝在裸機上,也可以通過Helm圖表部署在Kubernetes上,這也是提供的。
之前提到過gRPC端點如何向應用程序開發人員隱藏系統的復雜性。下面就讓快速了解一下如何與賈維斯互動。
在客戶端,Python接口通過簡單的Python API操作使與Jarvis服務器的通信更加容易。
例如,下面是如何創建對現有TTS Jarvis服務的請求的。
首先,導入Jarvis API:
import src.jarvis_proto.jarvis_tts_pb2 as jtts import src.jarvis_proto.jarvis_tts_pb2_grpc as jtts_srv import src.jarvis_proto.audio_pb2 as ja |
Next, create a gRPC channel to the Jarvis endpoint:
channel = grpc.insecure_channel('localhost:50051') jarvis_tts = jtts_srv.JarvisTTSStub(channel) |
Then, create a TTS request:
req = jtts.SynthesizeSpeechRequest() req.text = "We know what we are, but not what we may be?" req.language_code = "en-US" req.encoding = ja.AudioEncoding.LINEAR_PCM req.sample_rate_hz = 22050 req.voice_name = "ljspeech" resp = jarvis_tts.Synthesize(req) audio_samples = np.frombuffer(resp.audio, dtype=np.float32) |
Training a model with your data
通過使用NVIDIA NeMo或NVIDIA傳輸學習工具包,可以在Jarvis中使用定制的訓練模型(圖4)。
Figure 4. Jarvis from training to deploying: Using NeMo or TLT, it is possible to train or fine-tune models to improve the accuracy of Jarvis services, after trained models are exported with TensorRT for optimized inference and deployed in Jarvis.
例如,為了進一步提高ASR轉錄文本的易讀性和准確性,可能需要向ASR系統添加自定義標點和大寫模型,該系統通常生成沒有這些功能的文本。
從一個預訓練的BERT模型開始,第一步是准備數據集。對於訓練數據集中的每個單詞,目標是預測以下內容:
應該跟在單詞后面的標點符號。
這個詞是否應該大寫。
數據集准備就緒后,下一步是通過運行已提供的腳本進行訓練。
當訓練完成並達到所需的最終精度時,使用包含的腳本為Triton®聲波風廓線儀創建模型存儲庫。
Jarvis文檔包含了關於如何訓練或微調其模型的更多細節,這里只演示了使用NeMo進行定制的眾多可能性中的一種。
Deploying a model in Jarvis
最后,Jarvis是為大規模的對話人工智能而設計的。為了幫助在不同的服務器上高效地服務模型,NVIDIA使用Helm圖表提供了按鈕模型部署(圖5)。
Figure 5. Models can be deployed in Jarvis by modifying the available Helm chart.
Helm圖有幾個功能:
為Jarvis服務API服務器、Triton推理服務器和用於下載和轉換模型的實用工具容器從NGC中提取Docker圖像。
生成Triton推理服務器模型庫。
使用適當的配置啟動Triton推斷服務器。
將Triton推理服務器和Jarvis服務器公開為Kubernetes服務。
可以為自定義用例修改Helm圖表配置。可以更改與要部署哪些模型、存儲位置以及如何公開服務相關的設置。
結論
Jarvis可供選擇的一組客戶使用。如果有諸如虛擬助理、數字化身、多模態傳感器融合(CV與ASR/NLP/TTS融合)或任何ASR/NLP/TTS/CV獨立用例(如轉錄),那么Jarvis將在這里支持開發。