在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

    文章

    373

    瀏覽量

    41429
  • AI
    AI
    +關注

    關注

    88

    文章

    34778

    瀏覽量

    277035
  • tensorflow
    +關注

    關注

    13

    文章

    330

    瀏覽量

    61098

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

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

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

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

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

    UIAbility組件生命周期介紹

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

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

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

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

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

    定制互連解決方案:理想互連的正確選擇

    在雷迪埃,“定制”絕非僅僅是改造產品手冊中的組件,而是開啟創新之門,創造全新的互連解決方案。
    的頭像 發表于 02-14 09:43 ?383次閱讀
    <b class='flag-5'>定制</b><b class='flag-5'>化</b>互連解決方案:理想互連的正確選擇

    將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 ?2423次閱讀
    第四章:在 PC 交叉編譯 aarch64 的 <b class='flag-5'>tensorflow</b> 開發環境并測試

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

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

    TensorFlow是什么?TensorFlow怎么用?

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

    前后端數據傳輸約定探討

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

    tensorflow和pytorch哪個更簡單?

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

    tensorflow和pytorch哪個好

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

    tensorflow簡單的模型訓練

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

    keras模型轉tensorflow session

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

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

    繼續訓練也是必要的。本文將詳細介紹如何使用TensorFlow保存和加載模型,包括使用tf.keras和tf.saved_model兩種主要方法。
    的頭像 發表于 07-04 13:07 ?2601次閱讀
    主站蜘蛛池模板: 五月婷婷 六月丁香 | 视频网站免费看 | 欧美一级黄色影片 | 国产黄色视屏 | 天天干2018 | 狠狠燥| 特级a毛片 | 99色在线观看 | 午夜禁片| 国产精品第页 | 四虎影院黄色片 | 在线a免费 | 亚洲成a人片7777 | 深爱开心激情 | 88av视频在线观看 | 精品国产免费一区二区 | 免费不卡毛片 | 毛片色毛片18毛片美女 | 黄色爱爱视频 | 亚洲影视自拍揄拍愉拍 | 色偷偷91综合久久噜噜噜男男 | 国产在线99 | 国产精品久久免费观看 | 天天射天天怕 | 午夜色视频在线观看 | 天天干夜夜爽 | 8888四色奇米在线观看不卡 | 成 人 免费观看网站 | 99久久精品费精品国产一区二 | 日日噜噜爽爽狠狠视频 | 特级一级毛片 | 黄频网站免费大全在线观看 | 国产农村女人一级毛片了 | 欧美日韩国产网站 | 男女视频在线看 | bt天堂在线最新版www | 美女国产精品 | 久操免费在线视频 | 欧美激欧美啪啪片免费看 | 公妇乱淫日本免费观看 | 亚洲a在线观看 |