MapReduce+Docker:Archer简化Netflix媒体处理
Archer是Netflix的媒體處理引擎,底層是執(zhí)行MapReduce的各種Docker,在上層跑各種算法。Archer可以檢測(cè)出視頻中的圖像錯(cuò)誤,字幕對(duì)關(guān)鍵內(nèi)容的遮擋等問題。本文來自Netflix的科技博客,由LiveVideoStack摘譯整理。
文 / Naveen Mareddy, Frank San Miguel, Mangala Prabhu and Olof Johansson
譯 / 王月美
原文:https://medium.com/netflix-techblog/simplifying-media-innovation-at-netflix-with-archer-3f8cbb0e2bcb
想象一下,你正在開發(fā)一個(gè)快速原型,即通過電影《布萊德》的所有幀來篩選出威爾?史密斯的最佳鏡頭,并且需帶有動(dòng)感十足的背景。你的目標(biāo)是以高新人度正確地獲得計(jì)算機(jī)視覺算法,而不必考慮:
并行處理
云計(jì)算基礎(chǔ)設(shè)施,如EC2實(shí)例或者Docker容器系統(tǒng)
超高清(UHD)視頻源的位置
用于保存結(jié)果的云存儲(chǔ)API
若過程中途失敗,則重試策略
來自辦公室的資產(chǎn)重新投資
過去,我們開發(fā)人員必須考慮以上包括在內(nèi)的所有這些事情。正如你所看到的,當(dāng)目標(biāo)是簡單地獲得正確的算法時(shí),這是非常重要的。在此篇博客中,我們將分享我們?nèi)绾螛?gòu)建一個(gè)名為Archer的平臺(tái),在Archer中一切都以透明方式處理,使用戶能夠直入算法。
圖1:來自運(yùn)行在Archer上的“標(biāo)題圖像選擇算法”中的樣本
關(guān)于我們
我們是來自于媒體云工程團(tuán)隊(duì)(MCE)。我們支持高級(jí)媒體處理,其中包括媒體代碼轉(zhuǎn)換,預(yù)告片生成以及用于藝術(shù)品的高質(zhì)量圖像處理。我們的計(jì)算機(jī)農(nóng)場(chǎng)運(yùn)行數(shù)以萬計(jì)的EC2實(shí)例來處理動(dòng)態(tài)工作負(fù)載。計(jì)算機(jī)饑餓用例的一些示例包括A / B測(cè)試,基于鏡頭編碼的目錄范圍重新編碼以及高質(zhì)量標(biāo)題圖像。我們負(fù)責(zé)處理媒體計(jì)算平臺(tái)的大規(guī)模分布式計(jì)算方面,并與編碼技術(shù)團(tuán)隊(duì)密切合作,共同制定媒體標(biāo)準(zhǔn)和編解碼器。
我們的歷程
在Archer之前,已經(jīng)可以使用內(nèi)部開發(fā)的媒體處理平臺(tái)(代號(hào)Reloaded)在云中進(jìn)行分布式媒體處理。盡管它功能強(qiáng)大和靈活性高,但Reloaded平臺(tái)的開發(fā)需要在觀察軟件開發(fā)最佳實(shí)踐,持續(xù)集成(CI),部署編排和分階段發(fā)布培訓(xùn)的同時(shí),仔細(xì)設(shè)計(jì)動(dòng)態(tài)工作流,數(shù)據(jù)模型和分布式工作線程。雖然這些是為功能推出做出的正確選擇,但對(duì)于那些只關(guān)注其算法的研究人員而言,這其實(shí)是一個(gè)障礙和干擾。為了獲得敏捷性并免受云部署的干擾,我們的用戶要盡可能在本地計(jì)算機(jī)上運(yùn)行實(shí)驗(yàn)。但是該處規(guī)模是有限的。他們最終是需要針對(duì)大型內(nèi)容目錄運(yùn)行他們的算法,以獲得更好的信號(hào)。
我們研究了Apache Spark,Kubernetes和Apache Flink等分布式計(jì)算框架。 這些框架均缺少重要功能,如對(duì)媒體對(duì)象的一流支持,針對(duì)每次執(zhí)行的自定義docker鏡像或具有公平資源平衡的多租戶群集支持。
圖2:本地運(yùn)行大型實(shí)驗(yàn)的痛苦
然后我們就意識(shí)到,我們可以將Reloaded中的最佳屬性與流行的分布式計(jì)算框架中的模式相結(jié)合,并綜合減輕了前面提到的一些困難,提供了一個(gè)易于使用的平臺(tái),可以為點(diǎn)對(duì)點(diǎn)實(shí)驗(yàn),某些確定類型的生產(chǎn)用例進(jìn)行大規(guī)模地運(yùn)行。
Archer
Archer是一個(gè)易于使用的MapReduce樣式平臺(tái),用于使用容器進(jìn)行媒體處理,以便用戶可以提供其操作系統(tǒng)級(jí)別的依賴關(guān)系。常見的媒體處理步驟,如掛載視頻幀,由該平臺(tái)處理。開發(fā)人員編寫三個(gè)功能:分割,map和收集; 并且它們可以使用任何一種編程語言。Archer專為簡單的媒體處理而設(shè)計(jì),這就意味著該平臺(tái)能夠識(shí)別媒體格式,并為流行的媒體格式提供“白手套式”處理。例如,ProRes視頻幀是Archer中的第一個(gè)類對(duì)象,并支持將視頻源分割為基于鏡頭的塊[1](鏡頭是相機(jī)不移動(dòng)的視頻片段)。
使用Archer可構(gòu)建許多創(chuàng)新應(yīng)用程序,其中包括檢測(cè)由數(shù)碼相機(jī)故障引起的壞點(diǎn)像素的應(yīng)用程序,使用機(jī)器學(xué)習(xí)標(biāo)記音頻的應(yīng)用程序以及為字幕執(zhí)行自動(dòng)質(zhì)量控制(QC)的應(yīng)用程序。后續(xù),我們將會(huì)看到更多的應(yīng)用實(shí)例。
圖3:運(yùn)行中的壞點(diǎn)像素檢測(cè)器[1]
高級(jí)視圖
從10,000英尺的高度來看,Archer其實(shí)擁有多個(gè)組件來運(yùn)行工作。一切均是從REST API開始,來接受工作請(qǐng)求。然后工作流引擎選中請(qǐng)求并驅(qū)動(dòng)MapReduce工作流,將工作調(diào)度為優(yōu)先級(jí)隊(duì)列的消息。應(yīng)用程序工作線程在隊(duì)列中進(jìn)行偵別并執(zhí)行用戶提供的媒體處理功能。考慮到工作的動(dòng)態(tài)性,Archer使用了一個(gè)隊(duì)列感知縮放器來連續(xù)移動(dòng)資源,以確保所有應(yīng)用程序獲得足夠的計(jì)算資源。 (請(qǐng)參閱@Scale 2017會(huì)議上Archer的展示 https://atscaleconference.com/videos/archer-a-distributed-computing-platform-for-media-processing/)。
圖4:Archer的高級(jí)架構(gòu)
簡單操作
通過高效訪問云中的大文件,使用任意媒體文件與不可視基礎(chǔ)架構(gòu)進(jìn)行快速原型設(shè)計(jì)等功能,使得Archer的簡單操作成為可能。
MapReduce風(fēng)格 - 在Archer中,用戶認(rèn)為他們的處理工作具有三個(gè)功能:分割,map和收集。分割功能的作用是將媒體分成更小的單元。map功能將媒體處理算法應(yīng)用于每個(gè)分割之中。收集功能是來自map階段的結(jié)果結(jié)合起來。用戶可以用他們選擇的編程語言或使用內(nèi)置的語言功能來實(shí)現(xiàn)以上三個(gè)功能。Archer為常見任務(wù)提供了內(nèi)置功能,例如基于鏡頭的視頻幀分離器和連接收集器。通過僅實(shí)現(xiàn)map功能構(gòu)建應(yīng)用程序并使用分離器和收集器的內(nèi)置程序非常常見。而且,Archer用戶可以將內(nèi)置的可重用功能提供給平臺(tái)。
圖5:顯示MapReduce階段的示例Archer作業(yè)
視頻幀作為圖像—大多數(shù)計(jì)算機(jī)視覺算法(CV)喜歡使用JPEG / PNG圖像來檢測(cè)復(fù)雜的特征,如運(yùn)動(dòng)估計(jì)和相機(jī)鏡頭檢測(cè)。視頻源格式使用自定義壓縮技術(shù)來表示原始來源,并且需要進(jìn)行解碼以將源格式轉(zhuǎn)換為圖像。為避免需要重復(fù)相同的代碼來解碼視頻幀(每種源格式不同),Archer有一項(xiàng)功能,可允許用戶在作業(yè)提交期間選擇圖像格式,質(zhì)量以及裁剪參數(shù)。
基于容器的runtime — Archer用戶將其應(yīng)用程序打包為Docker圖像。它們以相同的方式在本地或云中運(yùn)行應(yīng)用程序。基于容器的本地開發(fā)使得用戶能夠快速地將應(yīng)用程序轉(zhuǎn)換為工作狀態(tài)并在此之后又快速迭代,然后,使用一些命令來將應(yīng)用程序按規(guī)模地運(yùn)行在云中。基于Docker的環(huán)境允許用戶安裝他們選擇的操作系統(tǒng)依賴關(guān)系,并且每個(gè)應(yīng)用程序可以獨(dú)立于其他應(yīng)用程序來選擇他們的操作系統(tǒng)依賴關(guān)系。例如,在Archer中運(yùn)行的實(shí)驗(yàn)可能會(huì)安裝FFmpeg等媒體工具的快照版本,并獲得快速反饋,而產(chǎn)生式應(yīng)用將依賴于已發(fā)布的版本。Archer使用Titus(Netflix的容器管理平臺(tái))大規(guī)模運(yùn)行這些容器。
圖6:按比例在云中運(yùn)行相同的操作系統(tǒng)的依賴關(guān)系
訪問內(nèi)容目錄—大多數(shù)Archer應(yīng)用程序需要訪問Netflix內(nèi)容目錄中的媒體源。Archer job API提供了一個(gè)內(nèi)容選擇器,用戶可以選擇他們選擇的可播放作為其作業(yè)執(zhí)行的輸入。例如,您可以通過僅知道電影ID來針對(duì)電影《布萊德》的UHD視頻源運(yùn)行算法。并且,無需擔(dān)心云中視頻源的位置或媒體格式。
本地開發(fā)— Netflix的開發(fā)者生產(chǎn)力團(tuán)隊(duì)已經(jīng)構(gòu)建了一個(gè)名為Newt(Netflix Workflow Toolkit)的工具來簡化本地開發(fā)人員的工作流程。Archer使用Newt來提供豐富的命令行界面,此使得本地開發(fā)變得簡單。開始一個(gè)新的Archer作業(yè)或下載實(shí)驗(yàn)結(jié)果僅用一個(gè)命令即可。這些命令將本地Docker工作流程以及與Archer作業(yè)API的交互進(jìn)行了包裝。另外,使用用戶所選擇的編程語言來構(gòu)建應(yīng)用程序也很容易。
圖7:本地開發(fā)工作流程
Archer助你一臂之力
借助像Archer這樣的簡單平臺(tái),我們的工程師可以在幾小時(shí)或幾天的時(shí)間內(nèi)自由地聯(lián)想、創(chuàng)作并實(shí)現(xiàn)它們。如果沒有Archer完成繁雜的任務(wù),我們可能沒有嘗試過這些創(chuàng)新。我們的用戶利用了數(shù)千萬個(gè)CPU小時(shí)創(chuàng)建出驚人的應(yīng)用程序。以下舉例:
圖像發(fā)現(xiàn)—AVA:Netflix的圖像發(fā)現(xiàn)藝術(shù)與科學(xué);
動(dòng)態(tài)優(yōu)化器— 一種感知視頻編碼優(yōu)化框架;
字幕創(chuàng)作— 使用Archer應(yīng)用程序渲染的鏡頭更改和燒錄文本位置數(shù)據(jù)用于字幕創(chuàng)作。
最佳圖像選擇—查找最適合Netflix產(chǎn)品界面中不同畫布的圖像。
機(jī)器輔助的質(zhì)量控制—于質(zhì)量控制各個(gè)階段進(jìn)行輔助。此輔助包括文本檢測(cè),音頻語言檢查以及檢測(cè)錯(cuò)誤視頻像素的文本。
圖8:在字幕創(chuàng)作工具中使用的Archer應(yīng)用程序生成的鏡頭更改數(shù)據(jù)
圖9:在Archer平臺(tái)上運(yùn)行的文本檢測(cè)算法
圖10:運(yùn)行在Archer上的應(yīng)用程序挑選的標(biāo)題圖像
圖11:由Archer啟用的插圖圖像發(fā)現(xiàn)
圖12:為插圖自動(dòng)選擇最佳姿勢(shì)
圖13:由Archer啟用的文本遮擋檢測(cè)
總結(jié)
Archher仍處于積極發(fā)展的階段,我們正努力不斷擴(kuò)展其功能和規(guī)模。我們對(duì)其擁有的經(jīng)驗(yàn)越多,則實(shí)現(xiàn)可能性就越大。以下是我們規(guī)劃圖中的一些項(xiàng)目:
增強(qiáng)多區(qū)域支持的穩(wěn)健性;
通過Netflix內(nèi)部計(jì)算低谷增加規(guī)模;
SLA和針對(duì)不同用戶和應(yīng)用的容量保證;
對(duì)音頻源的一流支持(我們已經(jīng)支持視頻);
平臺(tái)和應(yīng)用程序之間的運(yùn)行時(shí)間隔離程度更高;
為Python用戶豐富開發(fā)經(jīng)驗(yàn);
在接下來即將發(fā)布的博客文章中,我們將撰寫安全媒體存儲(chǔ)服務(wù),支持Archer和Netflix的其他項(xiàng)目。
雖然Archer平臺(tái)還是比較新的,待完善與改進(jìn)的,但是Netflix的許多團(tuán)隊(duì)每天正在驗(yàn)證該平臺(tái),他們正在采用Netflix產(chǎn)品并在Netflix產(chǎn)品中進(jìn)行創(chuàng)新。熱情和使用頻率正在不斷增長,以此同時(shí),我們也需要優(yōu)秀的工程人才。
參考文獻(xiàn)
[1] ?S. Bhattacharya, A. Prakash, and R. Puri, Towards Scalable Automated Analysis of Digital Video Assets for Content Quality Control Applications, SMPTE 2017 Annual Technical Conference, and Exhibition, Hollywood & Highland, Los Angeles, California, 2017
總結(jié)
以上是生活随笔為你收集整理的MapReduce+Docker:Archer简化Netflix媒体处理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 探索多媒体开发最新最佳实践,我们在深圳等
- 下一篇: 音视频技术开发周刊 56期