Cloudflare Workers生態(tài)系統(tǒng)現(xiàn)已提供廣泛的產(chǎn)品和功能,涵蓋計(jì)算、托管、存儲(chǔ)、數(shù)據(jù)庫(kù)、流式傳輸、聯(lián)網(wǎng)、安全等等。一直以來(lái),我們不斷嘗試鼓勵(lì)其他人從傳統(tǒng)軟件架構(gòu)轉(zhuǎn)移出來(lái),并證明和記錄在我們的技術(shù)棧上構(gòu)建可全球擴(kuò)展的復(fù)雜應(yīng)用程序是可行的。
今天,我們高興地宣布Constellation已正式加入到Cloudflare技術(shù)棧中,使開(kāi)發(fā)人員能夠在Cloudflare網(wǎng)絡(luò)上運(yùn)行預(yù)先訓(xùn)練好的機(jī)器學(xué)習(xí)模型和推理任務(wù)。
我們的Supercloud再添磚瓦
機(jī)器學(xué)習(xí)和人工智能最近成為了熱門(mén)話題,但事實(shí)上,我們多年來(lái)一直在日常生活中使用這些技術(shù),即使我們沒(méi)有意識(shí)到。例如,我們的手機(jī)、電腦、汽車和家庭助手等都擁有人工智能。它已經(jīng)無(wú)處不在。
然而,對(duì)于開(kāi)發(fā)人員來(lái)說(shuō),它還沒(méi)有成為一種商品。開(kāi)發(fā)人員通常需要理解其背后的數(shù)學(xué)原理,相關(guān)軟件和工具分散且復(fù)雜,而且運(yùn)行這些框架和數(shù)據(jù)所需的硬件或云服務(wù)成本高昂。
今天,我們的技術(shù)棧引入另一個(gè)功能,使每個(gè)人都可以在Cloudflare Workers上運(yùn)行機(jī)器學(xué)習(xí)模型并執(zhí)行推理任務(wù)。
Constellation簡(jiǎn)介
Constellation允許您通過(guò)Cloudflare Workers腳本使用預(yù)先訓(xùn)練的機(jī)器學(xué)習(xí)模型運(yùn)行快速、低延遲的推理任務(wù)。
可用Constellation部署的一些應(yīng)用程序示例如下:
·圖像或音頻分類或物體檢測(cè)
·數(shù)據(jù)中的異常檢測(cè)
·文本翻譯、摘要或相似性分析
·自然語(yǔ)言處理
·情緒分析
·語(yǔ)音識(shí)別或文本轉(zhuǎn)語(yǔ)音
·問(wèn)題回答
開(kāi)發(fā)人員可以將任何受支持的模型上傳到Constellation。他們可以獨(dú)立訓(xùn)練這些模型,也可以從機(jī)器學(xué)習(xí)中心(例如HuggingFace或ONNX Zoo)下載預(yù)先訓(xùn)練好的模型。
然而,并不是每個(gè)人都想訓(xùn)練模型或?yàn)g覽互聯(lián)網(wǎng)以獲取他們尚未測(cè)試過(guò)的模型。因此,Cloudflare也將維護(hù)一個(gè)經(jīng)過(guò)驗(yàn)證和可供使用的模型目錄。
我們打造的Constellation提供卓越的開(kāi)發(fā)人員體驗(yàn)和易于使用的API。以下是一個(gè)示例,可幫助您開(kāi)始使用。
圖像分類應(yīng)用程序
在這個(gè)例子中,我們將構(gòu)建一個(gè)由Constellation推理API和SqueezeNet模型驅(qū)動(dòng)的圖像分類應(yīng)用程序。SqueezeNet是一個(gè)卷積神經(jīng)網(wǎng)絡(luò)(CNN),在開(kāi)源的ImageNet數(shù)據(jù)庫(kù)上使用超過(guò)100萬(wàn)張圖像進(jìn)行預(yù)先訓(xùn)練,可將圖像分類到不超過(guò)1000個(gè)類別中。
與最早的圖像分類CNN和基準(zhǔn)之一AlexNet相比,Constellation速度要快得多(約3倍),體積小得多(約1/500),同時(shí)依然能保證類似的準(zhǔn)確性水平。其小體量尤其適合在資源有限的便攜式設(shè)備或自定義硬件上運(yùn)行。
首先,讓我們使用ONNX運(yùn)行時(shí)創(chuàng)建一個(gè)新的Constellation項(xiàng)目?,F(xiàn)在,Wrangler已經(jīng)內(nèi)置Constellation相關(guān)功能,可以使用`constellation`關(guān)鍵字調(diào)用。
$npx wrangler constellation project create"image-classifier"ONNX
現(xiàn)在讓我們創(chuàng)建包含項(xiàng)目綁定的wrangler.toml配置文件:
安裝Constellation客戶端API庫(kù):
$npm install cloudflare/constellation--save-dev
將預(yù)訓(xùn)練的SqueezeNet 1.1 ONNX模型上傳到項(xiàng)目。
$wgethttps://github.com/microsoft/onnxjs-demo/raw/master/docs/squeezenet1_1.onnx
$npx wrangler constellation model upload"image-classifier""squeezenet11"squeezenet1_1.onnx
如前所述,SqueezeNet將圖像分類到不超過(guò)1000個(gè)對(duì)象類別中。這些類別實(shí)際上是一組同義詞集即synset的形式。每個(gè)synset具有一個(gè)id和一個(gè)標(biāo)簽;它源于普林斯頓大學(xué)的WordNet數(shù)據(jù)庫(kù)術(shù)語(yǔ),也用于標(biāo)記ImageNet圖像數(shù)據(jù)庫(kù)。
為了將SqueezeNet的結(jié)果轉(zhuǎn)換為人類可讀的圖像類別,我們需要一個(gè)將synset ID(從模型獲得)映射到對(duì)應(yīng)標(biāo)簽的文件。
$mkdir src;cd src
$wgethttps://raw.githubusercontent.com/microsoft/onnxjs-demo/master/src/data/imagenet.ts
最后,讓我們編寫(xiě)并部署我們的圖像分類腳本。
這個(gè)腳本從請(qǐng)求中讀取圖像,將其解碼為一個(gè)多維float32張量(目前僅解碼PNG,但我們可以增加其他格式),將其輸入到Constellation中運(yùn)行的SqueezeNet模型,獲取結(jié)果,將結(jié)果與ImageNet類別列表進(jìn)行匹配,并返回圖像的人類可讀標(biāo)簽。
是不是非常簡(jiǎn)單?我們測(cè)試一下:
$curl https://ai.cloudflare.com/demos/image-classifier-F file=@images/mountain.png|jq.name
alp
$curl https://ai.cloudflare.com/demos/image-classifier-F file=@images/car.png|jq.name
convertible
$curl https://ai.cloudflare.com/demos/image-classifier-F file=@images/dog.png|jq.name
Ibizan hound
可在此看到概率的不同水平。模型對(duì)阿爾卑斯山和敞篷車的分類非常確定,但伊比贊獵犬的概率較低。照片中的狗確實(shí)是另一個(gè)品種。
這個(gè)小應(yīng)用程序演示了,使用機(jī)器學(xué)習(xí)模型和Constellation在Workers上構(gòu)建應(yīng)用程序時(shí)是多么容易和快捷。您可以在這里在此處查看完整的源代碼并自行部署該應(yīng)用程序。
Transformers模型
Transformers是由Google推出的深度學(xué)習(xí)模型,旨在處理序列輸入數(shù)據(jù),常用于自然語(yǔ)言處理(NLP)任務(wù),例如翻譯、摘要或情感分析,以及計(jì)算機(jī)視覺(jué)(CV)任務(wù),例如圖像分類。
Transformers.js是一個(gè)比較受歡迎的Demo,它從HuggingFace加載Transformers模型,并在您的瀏覽器內(nèi)使用編譯為WebAssembly ONNX Runtime來(lái)運(yùn)行它們。我們將這個(gè)演示移植到使用Constellation API來(lái)運(yùn)行。
如下鏈接打開(kāi)我們的版本:https://transformers-js.pages.dev/
與Workers的互操作性
Constellation另一個(gè)有趣的元素是,由于它原生運(yùn)行在Workers中,您可以將其與我們堆棧中的其他產(chǎn)品和API進(jìn)行編排。您可以使用KV、R2、D1、Queues等任何產(chǎn)品,甚至電子郵件。
以下Worker示例通過(guò)電子郵件路由從您在Cloudflare上的域接收電子郵件,使用t5-small情感分析模型運(yùn)行Constellation,添加一個(gè)帶有結(jié)果得分的標(biāo)題,并將其轉(zhuǎn)發(fā)到目標(biāo)地址。
現(xiàn)在,您可以使用Gmail或任何電子郵件客戶端,根據(jù)“X-Sentiment”標(biāo)題為您的郵件應(yīng)用規(guī)則。例如,您可能希望在所有憤怒的郵件到達(dá)時(shí)將其移動(dòng)到收件箱以外的不同文件夾中。
開(kāi)始使用Constellation
Constellation已啟動(dòng)內(nèi)測(cè)。如果想加入Constellation的等待列表,請(qǐng)前往儀表板,點(diǎn)擊賬戶下的“Workers”選項(xiàng)卡,然后點(diǎn)擊“請(qǐng)求訪問(wèn)”按鈕。我們的團(tuán)隊(duì)將分批開(kāi)通權(quán)限,您的帳戶獲得使用權(quán)限后將收到電子郵件通知。
與此同時(shí),您可以閱讀我們的Constellation開(kāi)發(fā)人員文檔進(jìn)一步了解其工作原理和API。Constellation可以通過(guò)Wrangler使用,也可以直接在儀表板UI中進(jìn)行管理。Wrangler是我們的命令行工具,用于配置、構(gòu)建和部署使用Cloudflare開(kāi)發(fā)人員產(chǎn)品的應(yīng)用程序。
我們非常期待了解您如何在應(yīng)用程序中使用機(jī)器學(xué)習(xí)/人工智能。Constellation將不斷改進(jìn),提供更高的限制、支持更多運(yùn)行時(shí)和更大的模型,但我們希望聽(tīng)取您的意見(jiàn)。您的反饋將對(duì)我們的產(chǎn)品優(yōu)化策略產(chǎn)生重要影響。
最后要說(shuō)的是:今天,我們一直在討論如何編寫(xiě)使用Constellation的Workers腳本,但這里有一個(gè)關(guān)于Constellation本身的事實(shí):Constellation本身就是通過(guò)WebAssembly、Workers、R2和我們的API構(gòu)建的。