91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

3天內不再提示

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

Tensorflowers ? 來源:TensorFlow ? 作者:TensorFlow ? 2020-11-26 09:36 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

引言

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

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

TensorFlow 快速回顧

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

TensorFlow 核心概念

Tensor(張量)

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

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

Operation(算?)

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

Graph(計算圖)

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

TensorFlow 數(shù)據(jù)流計算圖

Session(會話)

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

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

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

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

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

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

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

整體上看,基于 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++ 中具體的實現(xiàn)這個 op 所對應的內部處理邏輯,這就是所謂的后端 “kernel”。TF 提供了?些?便的基類接?,?戶?般只需要定義?個?類,override 實現(xiàn)其中的 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 這樣的宏,將上?所定義的接?和內部的實現(xiàn)給綁定起來。這是因為 TF ?持基于不同的輸?、輸出類型和所運?的底層設備架構來定義同?個算?不同的內部實現(xiàn),所以?戶可以定義多種 kernel 實現(xiàn),告知給系統(tǒng)什么場景下運?具體哪?個 kernel,在實際運?時,TF 就可以根據(jù)不同的設備、數(shù)據(jù)流上下?調?不同的 kernel 來實際執(zhí)?此 op。例如:

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

4. 將你的后端算?庫編譯為?個動態(tài)庫 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 就可以在?動構建反向梯度圖時?動的實現(xiàn)對?定義算?梯度的集成。

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

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

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

Rosetta 對 TensorFlow 的深度定制化

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

Rosetta 整體?程架構

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

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

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

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

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

計算圖的轉換構建過程

引入 rosetta 庫時

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

Rosetta在import時的靜態(tài)替換

調用 Session.run 接口時

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

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

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

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

@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 來統(tǒng)?承載?定義的密?數(shù)據(jù)類型,? TF 本身是不?持對于 tf.string 類型算?的?動求導的,所以 Rosetta 中還對 tf.python.ops.gradients_util 等??進?了 hook 改造。?如,在下?這?,我們設定當 tensor 的基礎類型為 string 時仍可以繼續(xù)進?反向傳播:

反向梯度圖的?動?成

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

補充說明

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

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

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

// 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 接?,所以定制化的程度更加深?。這?的改造是偏向于“系統(tǒng)易?性”這??標的,不需要太多涉及 MPC 等隱私計算技術。

作者介紹

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

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

參考文獻

[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

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

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

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

    關注

    0

    文章

    378

    瀏覽量

    42152
  • AI
    AI
    +關注

    關注

    91

    文章

    39894

    瀏覽量

    301537
  • tensorflow
    +關注

    關注

    13

    文章

    334

    瀏覽量

    62200

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

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    Neway微波國產替代方案

    Neway微波國產替代方案Neway對微波產品電源模塊進行全面優(yōu)化,采用國產電源組件替代進口產品。實際測試表明,國產電源組件在轉換效率(達94%以上)、紋波系數(shù)(<50mV)等
    發(fā)表于 01-30 08:45

    為什么高端相機都要配它?圖像采集卡的3大核心使命

    在工業(yè)檢測、醫(yī)療影像、半導體制造等對成像質量與效率要求極致的領域,高端相機早已成為核心裝備。但很多人會發(fā)現(xiàn),這些動輒數(shù)十萬的高端相機,很少單獨使用,往往必須搭配一塊圖像采集卡才能發(fā)揮全部性能。有人
    的頭像 發(fā)表于 12-11 14:51 ?358次閱讀
    為什么高<b class='flag-5'>端相</b>機都要配它?圖像采集卡的3大核心使命

    裸機前后臺的系統(tǒng)

    (void) { /* 硬件相關初始 */ HardWareInit(); /* 無限循環(huán) */ for (;;) { if (flag1) { /* 處理事情 1
    發(fā)表于 12-08 07:34

    如何評估電能質量在線監(jiān)測裝置的定制和聯(lián)動應用效果?

    評估電能質量在線監(jiān)測裝置的定制和聯(lián)動應用效果,需圍繞 “是否滿足場景核心需求” 展開,通過 “量化指標 + 實際場景驗證” 結合的方式,分別針對定制
    的頭像 發(fā)表于 10-23 09:28 ?519次閱讀

    電能質量在線監(jiān)測裝置如何進行定制與聯(lián)動應用?

    電能質量在線監(jiān)測裝置的定制與聯(lián)動應用,核心是 **“按需調整功能” 與 “數(shù)據(jù)驅動協(xié)同控制”**—— 定制針對不同行業(yè)(如新能源、工業(yè)、商業(yè))的特殊需求優(yōu)化硬件、軟件或數(shù)據(jù)采集;聯(lián)
    的頭像 發(fā)表于 10-23 09:23 ?428次閱讀

    晶映T8智能照明:節(jié)能改造定制,開啟照明新未來

    晶映 T8 智能照明主打節(jié)能改造定制,支持功率與亮度精細調節(jié),節(jié)能率超 90%,適配多場景,助力綠色低碳。
    的頭像 發(fā)表于 09-09 14:58 ?645次閱讀
    晶映T8智能照明:節(jié)能<b class='flag-5'>改造</b><b class='flag-5'>定制</b><b class='flag-5'>化</b>,開啟照明新未來

    工業(yè)數(shù)字改造有哪些前提

    工業(yè)數(shù)字改造是通過數(shù)字技術(如物聯(lián)網(wǎng)、大數(shù)據(jù)、人工智能、云計算等)對傳統(tǒng)工業(yè)生產、管理、運營模式進行全面升級的過程。其前提條件涉及技術、管理、人才、資金、基礎設施等多個維度,需系統(tǒng)性布局才能確保
    的頭像 發(fā)表于 07-08 10:20 ?776次閱讀

    企業(yè)數(shù)字改造需要用到哪些平臺

    企業(yè)數(shù)字改造需根據(jù)業(yè)務需求、技術基礎和轉型目標選擇適配平臺,以下是關鍵平臺類型及推薦方案: 一、核心業(yè)務數(shù)字平臺 低代碼/零代碼開發(fā)平臺 適用場景 :快速構建CRM、ERP、OA等業(yè)務系統(tǒng),降低
    的頭像 發(fā)表于 07-07 17:57 ?1576次閱讀

    ArkUI介紹

    ArkUI(方舟UI框架)為應用的UI開發(fā)提供了完整的基礎設施,包括簡潔的UI語法、豐富的UI功能(組件、布局、動畫以及交互事件),以及實時界面預覽工具等,可以支持開發(fā)者進行可視界面開發(fā)
    發(fā)表于 06-24 06:41

    ArkUI-X跨平臺應用改造指南

    框架已有API進行開發(fā)。 ??根據(jù)當前ArkUI-X框架的適配現(xiàn)狀,可分為三種改造方式,結合架構圖commons層 NetWork進行說明。至于工程中具體的文件部署細節(jié)詳見:工程目錄結構設計。 ??說明: 示例代碼主要展示整體流程、架構。
    發(fā)表于 06-16 23:05

    HarmonyOS實戰(zhàn):組件項目搭建

    前言 鴻蒙應用開發(fā)已經(jīng)成為互聯(lián)網(wǎng)新的風口,開發(fā)鴻蒙軟件已經(jīng)成為今年工作的核心目標。在軟件開發(fā)過程中,對于復雜度較大,功能較多的軟件都會采用組件項目架構,那么對于鴻蒙應用開發(fā)是否也能實現(xiàn)組件
    的頭像 發(fā)表于 06-09 14:58 ?682次閱讀
    HarmonyOS實戰(zhàn):<b class='flag-5'>組件</b><b class='flag-5'>化</b>項目搭建

    電機匝間絕緣測量儀的數(shù)字改造

    純分享帖,需要者可點擊附件免費獲取完整資料~~~*附件:電機匝間絕緣測量儀的數(shù)字改造.pdf【免責聲明】本文系網(wǎng)絡轉載,版權歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權問題,請第一時間告知,刪除內容!
    發(fā)表于 05-26 02:18

    UIAbility組件生命周期介紹

    : AbilityConstant.LaunchParam): void { // 頁面初始}// ...}說明: Want是對象間信息傳遞的載體,可以用于應用組件間的信息傳遞。Want的詳細介紹請參見信息傳遞載體Want
    發(fā)表于 05-16 08:28

    用樹莓派搞深度學習?TensorFlow啟動!

    介紹本頁面將指導您在搭載64位Bullseye操作系統(tǒng)的RaspberryPi4上安裝TensorFlow。TensorFlow是一個專為深度學習開發(fā)的大型軟件庫,它消耗大量資源。您可以在
    的頭像 發(fā)表于 03-25 09:33 ?1216次閱讀
    用樹莓派搞深度學習?<b class='flag-5'>TensorFlow</b>啟動!

    RAKsmart美國裸機云服務器DeepSeek的高級定制部署方案

    在RAKsmart美國裸機云服務器上進行DeepSeek的高級定制部署,需結合高性能硬件與靈活的軟件配置,以實現(xiàn)模型優(yōu)化、多任務并行及安全性提升。以下是針對企業(yè)級需求的詳細方案,主機推薦小編為您整理發(fā)布RAKsmart美國裸機
    的頭像 發(fā)表于 03-13 11:55 ?910次閱讀