色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

結合Rosetta介紹如何定制化改造TensorFlow前后端相關組件

Tensorflowers ? 來源:TensorFlow ? 作者:TensorFlow ? 2020-11-26 09:36 ? 次閱讀

本文來自社區投稿與征集,作者Rosetta 技術團隊。本文源自他們在 GDG 活動中的分享。

引言

我們之前分享了:【技術分享】隱私 AI 工程技術實踐指南,從整體上了介紹了基于深度學習框架開發隱私 AI 框架的?程挑戰和可?解決?案。在本文中,我們將進?步結合 Rosetta 介紹如何定制化改造 TensorFlow 前后端相關組件,以集成 MPC (Multi-Party Computation) 等隱私計算技術,同時保留對 TensorFlow 接口 API 的復?,從?實現我們上?篇?章中所強調的“系統易?性”。

?前 Rosetta 主要基于 TensorFlow 1.14 CPU 版本加以開發(以下簡稱 TensorFlow 為 TF),這是因為 TF 1.x ?前在?業界中實際應?較為?泛,?引?動態圖等?級功能的 TF 2.0,則由于接?不向后兼容等問題,仍沒有得到?規模落地。后續我們也將在 Rosetta 本身功能穩定的基礎上考慮?持 TF 2.0。下?就讓我們開始吧。

TensorFlow 快速回顧

想要基于 AI 框架進?步擴展引?隱私計算功能,第?步需要?較深?地了解這些 AI 框架,所以?先讓我們簡單回顧?下 TF 的核?概念以及宏觀的內部處理過程。

TensorFlow 核心概念

Tensor(張量)

深度學習需要完成對?量?維度復雜數據的處理,在 TensorFlow 中,? Tensor 來封裝同?類型數據的?維數組。其中,基礎類型除了各種不同精度的整數、浮點數外,還?持 tf.string 類型,這給我們提供了進??定義類型改造的可能性。

?個三維 Tensor(圖?來??絡)

Operation(算?)

Operation(算?,有時也稱“操作”)?來封裝對于 Tensor 的處理邏輯。同時也是連接 TF 的前端和后端之間邏輯處理的基本單元,在實際使?中,?戶可以使? Keras 等上層封裝 API 更?便的表達復雜計算邏輯,但是這些上層模塊的內部,最終也會調?各個算?來完成邏輯的表達。

Graph(計算圖)

?戶在 TF 前端調?各 API 形成的完整計算邏輯,在內部會以 data?ow graph 的形式來表達。在這?有向?環圖 (DAG) 上,以算?等作為節點,以 Tesnor 等作為邊來指明數據的流動路徑。在 graph 上,有些節點是 TF 框架?身根據需要添加的,?如,?戶在 training 算法階段時,只需要調?各種優化器 (Optimizer) 的 minimize ?法,TF ?身就會?動找到前向圖中各算?所對應的梯度算?,并按照數學上的鏈式求導法則,構建出反向梯度?圖。

TensorFlow 數據流計算圖

Session(會話)

Session 主要是在實際執? graph 時對?次執?的上下?進?維護處理。當?戶調?其 run ?法時,TF 就會分析為了獲取這?次的計算?標所需要運?的?圖,并結合 TF 內置的強?的并?優化、分布式執?等模塊,將所需要執?的邏輯進?步拆分為各個?圖,各?映射到當前的可?設備資源上,最終調度這些設備以并?的?式?效完成計算任務。

TensorFlow 分布式并?執?(圖?來??絡)

TensorFlow 的 codebase 本身還是很復雜的,篇幅所限,難以在此對 TensorFlow 進?深?的介紹,感興趣的讀者可以參考 TensorFlow 公眾號(TensorFlow_official) 上其他優秀?章以進?步學習 TensorFlow。

TensorFlow 自定義算子庫的擴展方法

TF 提供了?較豐富的擴展?法,除了在 Python 層可以基于內置的豐富算?集合,通過模塊的繼承、組裝等?式得到?定義的功能之外,還可以在后端 C++ 層?定義??的算?[2]。在后端基于 CustomC++op 機制進?擴展相?于在前端層進?擴展有?些特別的優勢:

有時候基于現有 TF 原?算?表達上層?定義邏輯很困難,?在后端實現則更靈活?由;

通過后端 CustomC++op,可以以更加?效的?式實現??的邏輯,可以在其中進?更底層的、?向編譯器等的各種優化;

整體上看,基于 TF 的擴展?具,使? customC++op,只需要完成以下四步即可:

1. 通過 TF 提供的 C++ 宏?具注冊新的 op。這主要是定義好這個 op 的輸?輸出類型、名稱等接?信息。例如在 Rosetta 中可以如下定義?個新的 op:

REGISTER_OP("RttMatmul") .Input("x: string") .Input("y: string") .Output("res: string") .Attr("transpose_a: bool = false") .Attr("transpose_b: bool = false") .SetIsStateful();

2. 在 C++ 中具體的實現這個 op 所對應的內部處理邏輯,這就是所謂的后端 “kernel”。TF 提供了?些?便的基類接?,?戶?般只需要定義?個?類,override 實現其中的 compute ?法即可,例如:

template class RttMatMulOp :public OpKernel { public: explicit RttMatMulOp(OpKernelConstruction* context) : OpKernel(context) { OP_REQUIRES_OK(context, context->GetAttr("transpose_a", &transpose_a_)); OP_REQUIRES_OK(context, context->GetAttr("transpose_b", &transpose_b_)); } void Compute(OpKernelContext* context) override { // Check if the dimensions of the two matrices are valid const Tensor& x = context->input(0); const Tensor& y = context->input(1); // detailed implementation... } }

3. 基于 REGISTER_KERNEL_BUILDER 這樣的宏,將上?所定義的接?和內部的實現給綁定起來。這是因為 TF ?持基于不同的輸?、輸出類型和所運?的底層設備架構來定義同?個算?不同的內部實現,所以?戶可以定義多種 kernel 實現,告知給系統什么場景下運?具體哪?個 kernel,在實際運?時,TF 就可以根據不同的設備、數據流上下?調?不同的 kernel 來實際執?此 op。例如:

REGISTER_KERNEL_BUILDER(Name("RttMatmul").Device(DEVICE_CPU), RttMatMulOp);

4. 將你的后端算?庫編譯為?個動態庫 so ?件后,在 Python 層調?接?引?此模塊,然后就可以如同調?原?算??樣的?式來調?這些?定義算?了。例如:

# load librtt_ops.so _rtt_ops_lib = os.path.dirname(__file__) + '/../../../librtt-ops.so' rtt_ops = tf.load_op_library(_rtt_ops_lib) # now, you can use the ops in this library as rtt_ops.rtt_matmul

如果你需要在模型訓練程序中調?這個?定義算?,你還需要在 Python 層通過 @ops.RegisterGradient("XXXOp") 來注冊這個算?對應的梯度算?,通過這種?式,TF 就可以在?動構建反向梯度圖時?動的實現對?定義算?梯度的集成。

Rosetta 利用 TF 這?擴展機制引?兩類算?:中間過渡層 RttOps 算?庫和隱私計算 SecureOps 算?庫,前者是為了?持?向?定義數據類型的計算圖的構建,后者是為了對接后端隱私計算功能,并在執?圖時進?動態綁定。之所以從設計上區分這兩類算?,是因為可以進?步解耦圖的構建和圖的執?,提供更多的靈活性。引?了這兩個基礎的算?庫之后,就可以進?步的進?整體的改造了。

RttOp 算?庫
與后端 MPC 隱私計算完全?關的輔助中間層,?系列的“浮標”置位算?,?持?定義Tensor類型。其內部默認的實現邏輯是和對應的 TF 原?算??樣的。

SecureOp 算?庫
完整的前后端算?庫,注冊了對應的梯度函數;在內部實現中調?隱私協議層的抽象算?接?實現和 TF 的對接。

Rosetta 對 TensorFlow 的深度定制化

如上?篇?章整體介紹的那樣,作為?向實際?業落地?標的隱私 AI 框架,Rosetta 對于 TF 的改造原則始終是為了提供更加便于 AI 開發者使?的上層接?,以及兼顧系統后端隱私協議的可擴展性。

Rosetta 整體?程架構

從系統架構和代碼上看,改造的??可以分為兩?部分:

后端 C++ 部分的適配定制。主要以?定義算?的 kernel 形式進?適配。?部分接?的輸?輸出參數是以 tf.string 基礎類型的 Tensor,??封裝的是?定義的密?數據。在隱私算? SecureOps 的 kernel 內部會進?步調?統?的密碼協議接?來完成 TF 到隱私計算功能的聯通。

前端 Python 部分的適配定制。這?除了在 Python 前端引?我們?定義的算?庫之外,還需要進?步改造 TF 中的?動求導功能等模塊以實現對于新隱私算?的?動構建圖、?動求導的?持。

從對程序的動態處理?度來看,如前?篇?章所說,Rosetta 是經過兩個階段的 Pass,來完成到底層多?協作的 MPC 處理程序的轉換。這??部分基于 TF 的前后端改造都是為了完成 StaticPass 階段的轉換,即將原? Tensor 轉換為?持?定義密?類型的 RttTensor,將原? Operation 轉換為?持 tf.string 格式輸?輸出的 RttOp ,并最終在圖開始啟動時進?步的轉換為承載實際 MPC 操作的 SecureOp 。

細?的讀者可以看出,上?在介紹 TF 的 customC++op 擴展機制的同時,我們已經展示了如何定義 Rosetta 中的單個新算?。接下來,我們介紹?下如何基于這些算?實現計算圖的分階段轉換。

計算圖的轉換構建過程

引入 rosetta 庫時

?戶在前端執? import lattciex.rosetta 之后,Rosetta 就會? RttOp 靜態替換掉原? TF 中對應的原? API 算?,且各個原? Tensor 也會被包裝?層到 RttTensor ,其與原? Tensor 的主要區別是,其數據的基礎類型是 tf.string,且對應的計算算?是 RttOp。這種基礎類型的轉換是基于 RttOp 算?庫中的 TfToRtt 和 RttToTf 兩個?于類型轉換的算?來完成的。

Rosetta在import時的靜態替換

調用 Session.run 接口時

我們同樣 hook 了 Session.run ??,在其內部完成從上?步驟中 RttOp 算?到 SecureOp 算?的轉換。如果?戶使? TensorBoard ?具查看此時的運?圖,就會看到我們在圖上添加了?個和原? TF 計算圖基本同構的新?圖,這個?圖就是由 SecureOp 構成。

TensorBoard 可以查看得到的 SecureOp 計算圖

和上?介紹的原? TF 中的完整圖構建過程?樣,如果?戶的程序含有模型訓練過程,調?了優化器 Optimizer 的 minimize ?法,則我們還需要完成對 SecureOp 的反向梯度圖?動?成的?持。

?先,我們需要注冊各個 SecureOp 算?所對應的梯度函數。?如對于隱私矩陣乘法算? SecureMatMul,我們按照底層梯度的計算邏輯,定義其梯度函數如下:

@ops.RegisterGradient("SecureMatmul") def SecureMatMulGrad(op, grad): """The gradient for the Secure MatMul operator.""" t_a = op.get_attr("transpose_a") t_b = op.get_attr("transpose_b") a = op.inputs[0] b = op.inputs[1] if not t_a and not t_b: grad_a = SecureMatMul(grad, b, transpose_b=True) grad_b = SecureMatMul(a, grad, transpose_a=True) elif not t_a and t_b: grad_a = SecureMatMul(grad, b) grad_b = SecureMatMul(grad, a, transpose_a=True) elif t_a and not t_b: grad_a = SecureMatMul(b, grad, transpose_b=True) grad_b = SecureMatMul(a, grad) elif t_a and t_b: grad_a = SecureMatMul(b, grad, transpose_a=True, transpose_b=True) grad_b = SecureMatMul(grad, a, transpose_a=True, transpose_b=True) return grad_a, grad_b

此外,由于我們使? tf.string 來統?承載?定義的密?數據類型,? TF 本身是不?持對于 tf.string 類型算?的?動求導的,所以 Rosetta 中還對 tf.python.ops.gradients_util 等??進?了 hook 改造。?如,在下?這?,我們設定當 tensor 的基礎類型為 string 時仍可以繼續進?反向傳播:

反向梯度圖的?動?成

通過這些精細的定制化改造,最終就可以實現反向梯度?圖的?動?成,可以極?的降低?戶上?隱私計算的開發難度。

補充說明

并?所有的算?都需要轉換為 SecureOp,這是因為如果?個局部?圖中全部的輸?都是本地的常量(公開的寫定到代碼中的數據,?需保護),那么就沒有必要將這個?圖轉換為多?協作的隱私計算?式計算,這樣可以減少不必要的計算時間。

轉換時,由于此時知道了即將運?的完整?圖的信息,?如 DAG 圖上有多少了算?需要運?,所以可以在這?進??些定制化的優化,?如優化底層協議中多?之間的并發通訊。

在通過上述過程完成在前端層到 SecureOp 圖的構建后,接下?就是依賴 TensorFlow ?身的圖執?引擎來調度執?各個 SecureOp 的后端實現了,在這個 kernal 中,為了和具體使?的隱私計算技術解耦,我們所調?的是密碼協議接?,?如 SecureMatMul ?最終通過如下代碼?段來調?內部“隱私計算引擎”。這?的內部細節,我們會在后續內容中加以介紹。

// call protocol ops vector outstr(m*n); ProtocolManager::Instance()->GetProtocol()->GetOps(msg_id().str())->Matmul(in1, in2, outstr, &attrs_);

小結

在本篇?章中,我們進?步介紹了 Rosetta 是如何深度適配、定制化改造 TensorFlow 的各個組件以引?隱私計算功能的。與其他隱私 AI 開源框架相?,Rosetta 由于需要同時對 TensorFlow 的前端和后端進?擴展,并且完全復?對上層的 API 接?,所以定制化的程度更加深?。這?的改造是偏向于“系統易?性”這??標的,不需要太多涉及 MPC 等隱私計算技術。

作者介紹

Rosetta 技術團隊,?群專注于技術、玩轉算法、追求?效的?程師。Rosetta 是?款基于主流深度學習框架 TensorFlow 的隱私 AI 框架,作為矩陣元公司?規模商業落地的重要引擎,它承載和結合了隱私計算、區塊鏈和 AI 三種典型技術。

?前 Rosetta 已經在 Github 開源(https://github.com/LatticeX-Foundation/Rosettaf),歡迎關注并參與到 Rosetta 社區中來。

參考文獻

[1] Abadi,Martín,etal."Tensor?ow:A system for large-scale machine learning." 12th{USENIX}symposium on operat ing syst ems design and implement at ion({OSDI}16).2016.

[2] TensorFlow 對定制化 Op 擴展的?持:https://tensor?ow.google.cn/guide/create_op

責任編輯:xj

原文標題:社區分享 | ?向隱私 AI 的 TensorFlow 深度定制化實踐

文章出處:【微信公眾號:TensorFlow】歡迎添加關注!文章轉載請注明出處。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 開發
    +關注

    關注

    0

    文章

    370

    瀏覽量

    40836
  • AI
    AI
    +關注

    關注

    87

    文章

    30728

    瀏覽量

    268891
  • tensorflow
    +關注

    關注

    13

    文章

    329

    瀏覽量

    60528

原文標題:社區分享 | ?向隱私 AI 的 TensorFlow 深度定制化實踐

文章出處:【微信號:tensorflowers,微信公眾號:Tensorflowers】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    將DMA與C64x的框架組件結合使用

    電子發燒友網站提供《將DMA與C64x的框架組件結合使用.pdf》資料免費下載
    發表于 10-16 10:29 ?0次下載
    將DMA與C64x的框架<b class='flag-5'>組件</b><b class='flag-5'>結合</b>使用

    第四章:在 PC 交叉編譯 aarch64 的 tensorflow 開發環境并測試

    本文介紹了在 PC 端交叉編譯 aarch64 平臺的 tensorflow 庫而非 tensorflow lite 的心酸過程。
    的頭像 發表于 08-25 11:38 ?1025次閱讀
    第四章:在 PC 交叉編譯 aarch64 的 <b class='flag-5'>tensorflow</b> 開發環境并測試

    通力發布最新定制電梯更新改造方案

    積極響應"兩新"工作部署,助力城市高質量發展 上海2024年8月6日 /美通社/ -- 作為全球電梯和自動扶梯行業的領導者之一,通力電梯今日宣布推出最新的定制電梯更新改造方案,旨在積極響應并
    的頭像 發表于 08-06 08:30 ?276次閱讀

    宜科EEDS Slim數字擴展組件介紹

    伴隨工業互聯網理念及數字能力建設需求的普及,企業生產力規劃過程對于數字能力的要求成為基礎技術要求,對于設備制造商而言,選擇直接開放設備數據接口或是通過搭載數字能力組件,更好的體現
    的頭像 發表于 07-18 16:16 ?379次閱讀
    宜科EEDS Slim數字<b class='flag-5'>化</b>擴展<b class='flag-5'>組件</b><b class='flag-5'>介紹</b>

    TensorFlow是什么?TensorFlow怎么用?

    TensorFlow是由Google開發的一個開源深度學習框架,它允許開發者方便地構建、訓練和部署各種復雜的機器學習模型。TensorFlow憑借其高效的計算性能、靈活的架構以及豐富的工具和庫,在學
    的頭像 發表于 07-12 16:38 ?659次閱讀

    前后端數據傳輸約定探討

    1 目的 穩定可靠,降本增效 ? 前后端數據傳輸約定旨在提升系統穩定性、可靠性,降低線上線下bug率;并提升研發效率、降低溝通成本、降低延期率。是確保項目前端和后端開發順利進行的重要規約之一,定義了
    的頭像 發表于 07-08 19:10 ?227次閱讀
    <b class='flag-5'>前后端</b>數據傳輸約定探討

    tensorflow和pytorch哪個更簡單?

    工業界廣泛使用、具有豐富生態系統和跨平臺支持的框架,TensorFlow可能更適合您。以下是tensorflow和pytorch的介紹TensorFlow和PyTorch的基本概念
    的頭像 發表于 07-05 09:45 ?847次閱讀

    tensorflow和pytorch哪個好

    tensorflow和pytorch都是非常不錯的強大的框架,TensorFlow還是PyTorch哪個更好取決于您的具體需求,以下是關于這兩個框架的一些關鍵點: TensorFlow : 發布時間
    的頭像 發表于 07-05 09:42 ?675次閱讀

    tensorflow簡單的模型訓練

    在本文中,我們將詳細介紹如何使用TensorFlow進行簡單的模型訓練。TensorFlow是一個開源的機器學習庫,廣泛用于各種機器學習任務,包括圖像識別、自然語言處理等。我們將從安裝
    的頭像 發表于 07-05 09:38 ?633次閱讀

    keras模型轉tensorflow session

    在這篇文章中,我們將討論如何將Keras模型轉換為TensorFlow session。 Keras和TensorFlow簡介 Keras是一個高級神經網絡API,它提供了一種簡單、快速的方式來構建
    的頭像 發表于 07-05 09:36 ?511次閱讀

    如何使用Tensorflow保存或加載模型

    繼續訓練也是必要的。本文將詳細介紹如何使用TensorFlow保存和加載模型,包括使用tf.keras和tf.saved_model兩種主要方法。
    的頭像 發表于 07-04 13:07 ?1481次閱讀

    TensorFlow的定義和使用方法

    TensorFlow是一個由谷歌人工智能團隊谷歌大腦(Google Brain)開發和維護的開源機器學習庫。它基于數據流編程(dataflow programming)的概念,將復雜的數學運算表示為
    的頭像 發表于 07-02 14:14 ?754次閱讀

    英特爾聯手日企研發后端芯片自動制造技術

    隨著電路制造等前端技術逐漸逼近物理極限,后端步驟如芯片堆疊以提升性能的競爭愈發激烈。目前,后端生產主要依賴手工組裝,主要分布在勞動力資源豐富的地區如中國和東南亞。因此,英特爾視自動技術為在美國和日本設立工廠的關鍵要素。
    的頭像 發表于 05-07 09:42 ?448次閱讀

    鴻蒙OS開發實例:【組件模式】

    組件一直是移動端比較流行的開發方式,有著編譯運行快,業務邏輯分明,任務劃分清晰等優點,針對Android端的組件;與Android端的組件
    的頭像 發表于 04-07 17:44 ?635次閱讀
    鴻蒙OS開發實例:【<b class='flag-5'>組件</b><b class='flag-5'>化</b>模式】

    模擬后端是什么意思

    模擬后端,在軟件開發和測試領域,通常是指使用工具或技術來模擬實際后端服務的行為。這樣做的主要目的是在項目開發過程中,當后端服務還未就緒或暫時無法訪問時,前端或其他依賴后端的系統能夠繼續
    的頭像 發表于 03-15 15:58 ?662次閱讀
    主站蜘蛛池模板: 久久伊人免费| 女子初尝黑人巨嗷嗷叫| 亚洲免费综合色视频| 女厕所边摸边吃奶边做爽视频| 色AV色婷婷97人妻久久久| 父亲猜女儿在线观看| 亚洲人成人77777在线播放| 美女直播喷水| 国产精品国产三级国产专区53 | china18一19 第一次| 色狠狠AV老熟女| 久久91精品国产91久久户| caoporen超碰在线视频| 午夜向日葵视频在线观看| 亚洲乱码日产精品BD在线下载| 国产人成精品综合欧美成人| 亚洲午夜久久影院| 青娱乐极品视觉盛宴国产视频| 国产精品视频免费视频| JAVAPARSER丰满白老师| 青青青青草| 久久亚洲精品2017| 国产欧美日韩视频怡春院| 9277高清在线观看视频| 亚洲、国产综合视频| 少妇精品久久久一区二区三区| 美女脱内衣裸身尿口露出来| 国产亚洲福利在线视频| 成人性生交大片免费看金瓶七仙女| 在线观看黄色小说| 一二三四在线高清中文版免费观看电影| 日本女人水多| 欧美亚洲国内日韩自拍视频| 乱码国产丰满人妻WWW| 九九精品视频一区二区三区| 国产欧美无码亚洲| 国产精品美女久久久久AV超清| 各种肉黄浪荡故事集| 俄罗斯XBXBXB兽交| 帝王被大臣们调教高肉| 丰满少妇69激懒啪啪无码|