RM新时代网站-首页

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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Apache Ignite上的TensorFlow!分布式內(nèi)存數(shù)據(jù)源

Tensorflowers ? 來(lái)源:lp ? 2019-03-28 16:09 ? 次閱讀

任何深度學(xué)習(xí)都是從數(shù)據(jù)開(kāi)始。這是非常關(guān)鍵的一點(diǎn)。沒(méi)有數(shù)據(jù),我們就無(wú)法訓(xùn)練模型,也無(wú)法評(píng)估模型質(zhì)量,更無(wú)法做出預(yù)測(cè)。因此,數(shù)據(jù)源非常重要。在做研究、構(gòu)建新的神經(jīng)網(wǎng)絡(luò)架構(gòu),以及做實(shí)驗(yàn)時(shí),我們習(xí)慣使用最簡(jiǎn)單的本地?cái)?shù)據(jù)源,通常是不同格式的文件。這種方法確實(shí)非常有效。但在某種情況下,我們需要更加接近生產(chǎn)環(huán)境。這時(shí),簡(jiǎn)化和加速生產(chǎn)數(shù)據(jù)饋送,以及能夠處理大數(shù)據(jù)就變得非常重要。這也正是 Apache Ignite 大展身手的時(shí)候。

Apache Ignite是以內(nèi)存為中心的分布式數(shù)據(jù)庫(kù),也是事務(wù)性、分析性和流式工作負(fù)載的緩存和處理平臺(tái),可以實(shí)現(xiàn) PB 級(jí)的內(nèi)存速度。借助 Apache Ignite 和 TensorFlow 之間的現(xiàn)有集成,您可以將 Apache Ignite 用作神經(jīng)網(wǎng)絡(luò)訓(xùn)練和推理的數(shù)據(jù)源,也可以將其用作分布式訓(xùn)練的檢查點(diǎn)存儲(chǔ)空間和集群管理器。

分布式內(nèi)存數(shù)據(jù)源

作為以內(nèi)存為中心的分布式數(shù)據(jù)庫(kù),Apache Ignite可以提供快速數(shù)據(jù)訪問(wèn)。讓您能夠擺脫硬盤限制,在分布式集群中存儲(chǔ)和處理您需要的所有數(shù)據(jù)。您可以通過(guò)使用 Ignite Dataset 來(lái)利用 Apache Ignite 的這些優(yōu)勢(shì)。

請(qǐng)注意,Apache Ignite 不只是數(shù)據(jù)庫(kù)或數(shù)據(jù)倉(cāng)庫(kù)與 TensorFlow 之間 ETL 管道的一個(gè)步驟,它還是一個(gè)HTAP(混合事務(wù) / 分析處理)系統(tǒng)。通過(guò)選擇 Apache Ignite 和 TensorFlow,您會(huì)獲得一個(gè)用于事務(wù)和分析處理的單一系統(tǒng),同時(shí)還可以使用操作和歷史數(shù)據(jù)進(jìn)行神經(jīng)網(wǎng)絡(luò)訓(xùn)練和推理。

以下基準(zhǔn)測(cè)試結(jié)果表明,Apache Ignite 非常適合用于單節(jié)點(diǎn)數(shù)據(jù)存儲(chǔ)用例。如果存儲(chǔ)空間和客戶端位于同一節(jié)點(diǎn),則通過(guò)使用 Apache Ignite,您可以實(shí)現(xiàn)每秒超過(guò) 850 MB 的吞吐量。如果存儲(chǔ)空間位于與客戶端相關(guān)的遠(yuǎn)程節(jié)點(diǎn),則吞吐量約為每秒 800 MB。

當(dāng)存在一個(gè)本地 Apache Ignite 節(jié)點(diǎn)時(shí) Ignite Dataset 的吞吐量。執(zhí)行該基準(zhǔn)測(cè)試時(shí)使用的是 2 個(gè) Xeon E5–2609 v4 1.7GHz 處理器,配備 16Gb 內(nèi)存和每秒 10 Gb 的網(wǎng)絡(luò)(1MB 的行和 20MB 的頁(yè)面大?。?/p>

另一個(gè)基準(zhǔn)測(cè)試表明 Ignite Dataset 如何與分布式 Apache Ignite 集群協(xié)作。這是 Apache Ignite 作為 HTAP 系統(tǒng)的默認(rèn)用例,它使您能夠在每秒 10 Gb 的網(wǎng)絡(luò)集群上為單個(gè)客戶端實(shí)現(xiàn)每秒超過(guò) 1 GB 的讀取吞吐量。

分布式 Apache Ignite 集群具備不同數(shù)量的節(jié)點(diǎn)(從 1 到 9)時(shí) Ignite Dataset 的吞吐量。執(zhí)行該基準(zhǔn)測(cè)試時(shí)使用的是 2 個(gè) Xeon E5–2609 v4 1.7GHz 處理器,配備 16Gb 內(nèi)存和每秒 10 Gb 的網(wǎng)絡(luò)(1MB 的行和 20MB 的頁(yè)面大?。?/p>

測(cè)試后的用例如下:Apache Ignite 緩存(以及第一組測(cè)試中數(shù)量不同的分區(qū)和第二組測(cè)試中的 2048 個(gè)分區(qū))由 10000 個(gè)大小為 1MB 的行填充,然后 TensorFlow 客戶端使用 Ignite Dataset 讀取所有數(shù)據(jù)。所有節(jié)點(diǎn)均以 2 個(gè) Xeon E5–2609 v4 1.7GHz 處理器表示,配備 16Gb 內(nèi)存和每秒 10Gb 的網(wǎng)絡(luò)連接。每個(gè)節(jié)點(diǎn)使用默認(rèn) 配置運(yùn)行 Apache Ignite。

注:配置 鏈接

https://github.com/apache/ignite/blob/master/examples/config/example-default.xml

您可以很輕松地將 Apache Ignite 同時(shí)用作帶有結(jié)構(gòu)化查詢語(yǔ)言 (SQL) 界面的傳統(tǒng)數(shù)據(jù)庫(kù)和 TensorFlow 數(shù)據(jù)源。

apache-ignite/bin/ignite.shapache-ignite/bin/sqlline.sh -u "jdbc:ignite:thin://localhost:10800/"

CREATE TABLE KITTEN_CACHE (ID LONG PRIMARY KEY, NAME VARCHAR);INSERT INTO KITTEN_CACHE VALUES (1, 'WARM KITTY');INSERT INTO KITTEN_CACHE VALUES (2, 'SOFT KITTY');INSERT INTO KITTEN_CACHE VALUES (3, 'LITTLE BALL OF FUR');

import tensorflow as tffrom tensorflow.contrib.ignite import IgniteDatasettf.enable_eager_execution()dataset = IgniteDataset(cache_name="SQL_PUBLIC_KITTEN_CACHE")for element in dataset: print(element)

{'key': 1, 'val': {'NAME': b'WARM KITTY'}}{'key': 2, 'val': {'NAME': b'SOFT KITTY'}}{'key': 3, 'val': {'NAME': b'LITTLE BALL OF FUR'}}

結(jié)構(gòu)化對(duì)象

使用Apache Ignite,您可以存儲(chǔ)任何類型的對(duì)象。這些對(duì)象可以具備任何層次結(jié)構(gòu)。Ignite Dataset 能夠處理此類對(duì)象。

import tensorflow as tffrom tensorflow.contrib.ignite import IgniteDatasettf.enable_eager_execution()dataset = IgniteDataset(cache_name="IMAGES")for element in dataset.take(1): print(element)

{ 'key': 'kitten.png', 'val': { 'metadata': { 'file_name': b'kitten.png', 'label': b'little ball of fur', width: 800, height: 600 }, 'pixels': [0, 0, 0, 0, ..., 0] }}

如果您使用 Ignite Dataset,則神經(jīng)網(wǎng)絡(luò)訓(xùn)練和其他計(jì)算所需的轉(zhuǎn)換都可以作為tf.data管道的一部分來(lái)完成。

import tensorflow as tffrom tensorflow.contrib.ignite import IgniteDatasettf.enable_eager_execution()dataset = IgniteDataset(cache_name="IMAGES").map(lambda obj: obj['val']['pixels'])for element in dataset: print(element)

[0, 0, 0, 0, ..., 0]

分布式訓(xùn)練

作為機(jī)器學(xué)習(xí)框架,TensorFlow 可以為分布式神經(jīng)網(wǎng)絡(luò)訓(xùn)練、推理及其他計(jì)算提供原生支持。分布式神經(jīng)網(wǎng)絡(luò)訓(xùn)練的主要理念是能夠在每個(gè)數(shù)據(jù)分區(qū)(根據(jù)水平分區(qū))上計(jì)算損失函數(shù)的梯度(例如,誤差的平方),然后對(duì)梯度求和,以得出整個(gè)數(shù)據(jù)集的損失函數(shù)梯度。借助這種能力,我們可以在數(shù)據(jù)存儲(chǔ)位置的節(jié)點(diǎn)上計(jì)算梯度,減少梯度,最后更新模型參數(shù)。這樣,您就無(wú)需在節(jié)點(diǎn)間傳輸數(shù)據(jù),從而避免了網(wǎng)絡(luò)瓶頸。

Apache Ignite 在分布式集群中使用水平分區(qū)存儲(chǔ)數(shù)據(jù)。在創(chuàng)建 Apache Ignite 緩存(或基于 SQL 的表格)時(shí),我們可以指定將要在此對(duì)數(shù)據(jù)進(jìn)行分區(qū)的分區(qū)數(shù)量。例如,如果一個(gè) Apache Ignite 集群由 100 臺(tái)機(jī)器組成,我們創(chuàng)建了一個(gè)有 1000 個(gè)分區(qū)的緩存,則每臺(tái)機(jī)器將要維護(hù) 10 個(gè)數(shù)據(jù)分區(qū)。

Ignite Dataset 允許使用分布式神經(jīng)網(wǎng)絡(luò)訓(xùn)練(使用 TensorFlow)和 Apache Ignite 分區(qū)的這兩個(gè)方面。Ignite Dataset 是一個(gè)可以在遠(yuǎn)程工作器上執(zhí)行的計(jì)算圖操作。遠(yuǎn)程工作器可以通過(guò)為工作器進(jìn)程(例如 IGNITE_DATASET_HOST、IGNITE_DATASET_PORT 或 IGNITE_DATASET_PART)設(shè)置相應(yīng)的環(huán)境變量來(lái)替換 Ignite Dataset 的參數(shù)(例如主機(jī)、端口或分區(qū))。使用這種替換方法,我們可以為每個(gè)工作器分配一個(gè)特定分區(qū),這樣一個(gè)工作器處理一個(gè)分區(qū),同時(shí)可以與單個(gè)數(shù)據(jù)集透明協(xié)作。

import tensorflow as tffrom tensorflow.contrib.ignite import IgniteDatasetdataset = IgniteDataset("IMAGES")# Compute gradients locally on every worker node.gradients = []for i in range(5): with tf.device("/job:WORKER/task:%d" % i): device_iterator = tf.compat.v1.data.make_one_shot_iterator(dataset) device_next_obj = device_iterator.get_next() gradient = compute_gradient(device_next_obj) gradients.append(gradient)# Aggregate them on master node.result_gradient = tf.reduce_sum(gradients)with tf.Session("grpc://localhost:10000") as sess: print(sess.run(result_gradient))

借助 Apache Ignite,您還可以使用 TensorFlow 高級(jí)Estimator API來(lái)進(jìn)行分布式訓(xùn)練。此功能以所謂的 TensorFlow 分布式訓(xùn)練的 獨(dú)立客戶端模式 為基礎(chǔ),Apache Ignite 在其中發(fā)揮數(shù)據(jù)源和集群管理器的作用。與此相關(guān)的內(nèi)容,我們將在下一篇文章中全面介紹。

注:獨(dú)立客戶端模式 鏈接

https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/distribute#standalone-client-mode

檢查點(diǎn)存儲(chǔ)

除數(shù)據(jù)庫(kù)功能外,Apache Ignite 還有一個(gè)名為IGFS的分布式文件系統(tǒng)。IGFS 可以提供與 Hadoop HDFS 類似的功能,但僅限于內(nèi)部存儲(chǔ)。事實(shí)上,除自有 API 外,IGFS 還采用了 Hadoop FileSystem API,并且可以透明地插接到 Hadoop 或 Spark 部署中。Apache Ignite 上的 TensorFlow 支持 IGFS 與 TensorFlow 集成。該集成基于 TensorFlow 端的 自定義文件系統(tǒng)插件 和 Apache Ignite 端的IGFS Native API。它有許多用例,例如:

可以將狀態(tài)檢查點(diǎn)保存到 IGFS 中,以獲得可靠性和容錯(cuò)性

訓(xùn)練過(guò)程可以通過(guò)將事件文件寫入 TensorBoard 監(jiān)視的目錄來(lái)與 TensorBoard 通信。即使 TensorBoard 在不同的進(jìn)程或機(jī)器中運(yùn)行,IGFS 也允許進(jìn)行此通信

注:自定義文件系統(tǒng)插件 鏈接

https://www.tensorflow.org/guide/extend/filesystem

IGFS Native API 鏈接

https://ignite.apache.org/features/igfs.html

此功能于 TensorFlow 1.13 中發(fā)布,并將在 TensorFlow 2.0 中作為tensorflow/io的一部分發(fā)布。

注:tensorflow/io 鏈接

https://github.com/tensorflow/io

SSL 連接

通過(guò) Apache Ignite,您可以使用SSL和身份驗(yàn)證來(lái)保護(hù)數(shù)據(jù)傳送渠道。Ignite Dataset 支持具備和不具備身份驗(yàn)證的 SSL 連接。如需更多信息,請(qǐng)參閱Apache Ignite SSL/TLS文檔(https://apacheignite.readme.io/docs/ssltls)。

import tensorflow as tffrom tensorflow.contrib.ignite import IgniteDatasettf.enable_eager_execution()dataset = IgniteDataset(cache_name="IMAGES", certfile="client.pem", cert_password="password", username="ignite", password="ignite")

Windows 支持

Ignite Dataset 完全兼容 Windows 系統(tǒng)。您可以在 Windows 工作站和 Linux/MacOS 系統(tǒng)上將其用作 TensorFlow 的一部分。

試用

以下示例將幫助您輕松開(kāi)始使用此模塊。

Ignite Dataset

要試用 Ignite Dataset,最簡(jiǎn)單的方法是使用 Apache Ignite 和加載好的MNIST數(shù)據(jù)運(yùn)行Docker容器,然后使用 Ignite Dataset 與其交互。您可以在 Docker Hub:dmitrievanthony/ignite-with-mnist上找到此容器。您需要在機(jī)器上啟動(dòng)此容器:

docker run -it -p 10800:10800 dmitrievanthony/ignite-with-mnist

注:MNIST 鏈接

http://yann.lecun.com/exdb/mnist/

dmitrievanthony/ignite-with-mnist 鏈接

https://hub.docker.com/r/dmitrievanthony/ignite-with-mnist/

然后您可以按照以下方法使用它:

IGFS

TensorFlow 的 IGFS 支持功能于 TensorFlow 1.13 中發(fā)布,并將在 TensorFlow 2.0 中作為tensorflow/io的一部分發(fā)布。如要通過(guò) TensorFlow 試用 IGFS,最簡(jiǎn)單的方法是使用 Apache Ignite 和 IGFS 來(lái)運(yùn)行Docker容器,然后使用 TensorFlowtf.gfile與其交互。您可以在 Docker Hub:dmitrievanthony/ignite-with-igfs上找到此容器。您可以在自己的機(jī)器上運(yùn)行此容器:

docker run -it -p 10500:10500 dmitrievanthony/ignite-with-igfs

然后您可以按照以下方法使用它:

import tensorflow as tfimport tensorflow.contrib.ignite.python.ops.igfs_opswith tf.gfile.Open("igfs:///hello.txt", mode='w') as w: w.write("Hello, world!")with tf.gfile.Open("igfs:///hello.txt", mode='r') as r: print(r.read())

Hello, world!

限制

目前,Ignite Dataset 需要假設(shè)緩存中的所有對(duì)象都具有相同的結(jié)構(gòu)(同類型對(duì)象),并且緩存中至少包含一個(gè)檢索架構(gòu)所需的對(duì)象。另一個(gè)限制與結(jié)構(gòu)化對(duì)象有關(guān),Ignite Dataset 不支持通用唯一識(shí)別碼 (UUID)、地圖和可能是對(duì)象結(jié)構(gòu)組成部分的對(duì)象數(shù)組。所有這些限制都是進(jìn)一步開(kāi)發(fā)的主題。

即將發(fā)布的 TensorFlow 2.0

TensorFlow 2.0 中即將發(fā)布的新變更會(huì)將此功能分離到tensorflow/io模塊。之后,您將可以更加靈活地使用此功能。這些示例將略有改動(dòng),我們的文檔和示例也會(huì)反映這一點(diǎn)。

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

原文標(biāo)題:Apache Ignite 上的 TensorFlow

文章出處:【微信號(hào):tensorflowers,微信公眾號(hào):Tensorflowers】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Apache Kafka簡(jiǎn)介(1)#分布式數(shù)據(jù)

    分布式數(shù)據(jù)
    未來(lái)加油dz
    發(fā)布于 :2023年07月03日 22:45:31

    Apache Kafka簡(jiǎn)介(2)#分布式數(shù)據(jù)

    分布式數(shù)據(jù)
    未來(lái)加油dz
    發(fā)布于 :2023年07月03日 22:45:56

    #分布式數(shù)據(jù)

    分布式數(shù)據(jù)
    未來(lái)加油dz
    發(fā)布于 :2023年07月03日 22:58:32

    分布式軟件系統(tǒng)

    三個(gè)特點(diǎn):分布性、通信性和穩(wěn)健性。 分布式文件系統(tǒng)具有執(zhí)行遠(yuǎn)程文件存取的能力,并以透明方式對(duì)分布在網(wǎng)絡(luò)的文件進(jìn)行管理和存取。 分布式數(shù)據(jù)庫(kù)
    發(fā)表于 07-22 14:53

    分布式數(shù)據(jù)庫(kù)有什么優(yōu)缺點(diǎn)?

    分布式數(shù)據(jù)庫(kù)系統(tǒng)(DDBS)是數(shù)據(jù)庫(kù)技術(shù)和網(wǎng)絡(luò)技術(shù)兩者相互滲透和有機(jī)結(jié)合的結(jié)果。涉及數(shù)據(jù)庫(kù)基本理論和網(wǎng)絡(luò)通信理論。分布式數(shù)據(jù)庫(kù)由一組數(shù)據(jù)組成
    發(fā)表于 09-24 09:13

    HarmonyOS教程—基于分布式數(shù)據(jù)接口,實(shí)現(xiàn)多種設(shè)備一致的數(shù)據(jù)訪問(wèn)體驗(yàn)

    相互同步,為用戶提供在多種終端設(shè)備一致的數(shù)據(jù)訪問(wèn)體驗(yàn)。有關(guān)分布式數(shù)據(jù)服務(wù)更加詳細(xì)的介紹可以參考分布式數(shù)
    發(fā)表于 09-26 11:40

    基于Web services的分布式企業(yè)信息整合模型

    針對(duì)目前電力系統(tǒng)的信息整合需求,設(shè)計(jì)基于Web services的電力系統(tǒng)多層分布式信息整合模型。該模型可以跨越不同企業(yè)數(shù)據(jù)源、應(yīng)用體系和開(kāi)發(fā)語(yǔ)言的界限,以服務(wù)的形式封裝數(shù)據(jù)
    發(fā)表于 04-21 09:16 ?14次下載

    分布式數(shù)據(jù)庫(kù),什么是分布式數(shù)據(jù)庫(kù)

    分布式數(shù)據(jù)庫(kù),什么是分布式數(shù)據(jù)庫(kù) 分布式數(shù)據(jù)庫(kù)系統(tǒng)是在集中式數(shù)據(jù)庫(kù)系統(tǒng)成熟技術(shù)的基礎(chǔ)發(fā)展起來(lái)的,但不是簡(jiǎn)單地把集中式數(shù)
    發(fā)表于 03-18 15:25 ?3977次閱讀

    基于LDA主題模型進(jìn)行數(shù)據(jù)源選擇方法

    基于數(shù)據(jù)源的樣本文檔集和查詢之間的關(guān)鍵詞匹配,通常無(wú)法很好地解決少量樣本文檔的信息缺失問(wèn)題。針對(duì)這一問(wèn)題,提出了基于隱含狄利克雷分布( LDA)主題模型進(jìn)行數(shù)據(jù)源選擇的方法。首先,使用LDA主題模型獲得
    發(fā)表于 01-04 15:00 ?0次下載
    基于LDA主題模型進(jìn)行<b class='flag-5'>數(shù)據(jù)源</b>選擇方法

    Apache RocketMQ 正式開(kāi)源分布式事務(wù)消息

    摘要:?近日,Apache RocketMQ 社區(qū)正式發(fā)布4.3版本。此次發(fā)布不僅包括提升性能,減少內(nèi)存使用等原有特性增強(qiáng),還修復(fù)了部分社區(qū)提出的若干問(wèn)題,更重要的是該版本開(kāi)源了社區(qū)最為關(guān)心的分布式
    發(fā)表于 08-20 15:15 ?319次閱讀

    Apache Spark的分布式深度學(xué)習(xí)框架BigDL的概述

    該視頻概述了Apache Spark *的BigDL分布式深度學(xué)習(xí)框架。
    的頭像 發(fā)表于 10-30 06:41 ?3247次閱讀

    Apache Spark分布式機(jī)器學(xué)習(xí)的介紹

    Apache Spark分布式機(jī)器學(xué)習(xí)
    的頭像 發(fā)表于 11-05 06:31 ?2913次閱讀

    歐拉(openEuler)Summit2021:基于分布式內(nèi)存池的分布式應(yīng)用數(shù)據(jù)交換與共享

    歐拉(openEuler)Summit 2021分布式&多樣性計(jì)算分論壇,介紹了基于分布式內(nèi)存池的分布式應(yīng)用
    的頭像 發(fā)表于 11-10 15:48 ?2363次閱讀
    歐拉(openEuler)Summit2021:基于<b class='flag-5'>分布式</b><b class='flag-5'>內(nèi)存</b>池的<b class='flag-5'>分布式</b>應(yīng)用<b class='flag-5'>數(shù)據(jù)</b>交換與共享

    SpringBoot分布式事務(wù)的解決方案(JTA+Atomic+多數(shù)據(jù)源

    首先,到底啥是分布式事務(wù)呢,比如我們?cè)趫?zhí)行一個(gè)業(yè)務(wù)邏輯的時(shí)候有兩步分別操作A數(shù)據(jù)源和B數(shù)據(jù)源,當(dāng)我們?cè)贏數(shù)據(jù)源執(zhí)行數(shù)據(jù)更改后,在B
    的頭像 發(fā)表于 04-11 11:05 ?1627次閱讀

    數(shù)據(jù)源數(shù)據(jù)轉(zhuǎn)換和同步的ETL工具推薦

    有許多支持多數(shù)據(jù)源數(shù)據(jù)轉(zhuǎn)換和同步的ETL工具可供選擇。以下是一些常見(jiàn)的ETL工具和它們支持多數(shù)據(jù)源數(shù)據(jù)轉(zhuǎn)換和同步的特點(diǎn): Apache Ni
    的頭像 發(fā)表于 07-28 16:32 ?1093次閱讀
    RM新时代网站-首页