<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          實踐教程丨如何在邊緣基礎(chǔ)設(shè)施上運行故障預測解決方案?

          共 4883字,需瀏覽 10分鐘

           ·

          2020-12-12 09:15

          ? ? 作者簡介

          Janakiram MSV是Janakiram & Associates的首席分析師,也是國際信息技術(shù)學院的兼職教師。他也是Google Qualified Developer、亞馬遜認證解決方案架構(gòu)師、亞馬遜認證開發(fā)者、亞馬遜認證SysOps管理員和微軟認證Azure專業(yè)人員。


          Janakiram是云原生計算基金會(CNCF)的大使,也是首批Kubernetes認證管理員和Kubernetes認證應(yīng)用開發(fā)者之一。他曾在微軟、AWS、Gigaom Research等知名公司工作。


          之前的文章中,我討論了Rancher的輕量級Kubernetes發(fā)行版K3s、Calico和Portworx如何成為運行在邊緣的現(xiàn)代AI和物聯(lián)網(wǎng)系統(tǒng)的基礎(chǔ)。在本文中我們將設(shè)計和部署一個解決方案以運行在這一基礎(chǔ)設(shè)施上。


          我們將基于監(jiān)控渦輪機的風扇的假設(shè)場景來構(gòu)建一個預測性維護解決方案,以檢測風扇的異常情況。該架構(gòu)利用了各種開源的云原生技術(shù),可以作為設(shè)計和構(gòu)建IoT/邊緣解決方案的參考架構(gòu)。


          問題陳述


          我們將設(shè)計和部署一個解決方案,該解決方案可以從多個風扇攝取遙測數(shù)據(jù),并在故障發(fā)生之前使用實時流(real-time stream)來預測故障。該解決方案運行在低端機器(如英特爾NUC)的邊緣基礎(chǔ)設(shè)施上。在本文中,我們將使用前文搭建的基礎(chǔ)設(shè)施(基于K3s、Calico以及Portwox),它們提供了Kubernetes集群的核心組件。


          解決方案架構(gòu)


          連接到風扇的傳感器提供了當前的轉(zhuǎn)速、振動、溫度和噪音水平等數(shù)據(jù)。這些遙測數(shù)據(jù)流和每個風扇的設(shè)備ID一起作為預測性維護解決方案的輸入。



          Mosquitto是一款使用廣泛的開源MQTT broker,它將作為傳感器的網(wǎng)關(guān)以及平臺的集中式消息broker。傳感器將遙測數(shù)據(jù)攝入Mosquitto broker的fan/messages類別下方。


          以下是每個風扇發(fā)布到MQTT主題的有效載荷:



          預測器微服務(wù)和風扇發(fā)布的數(shù)據(jù)在同一個遙測頻道,它會從中讀取數(shù)據(jù)。對于每個入站數(shù)據(jù)點,它都會調(diào)用異常檢測服務(wù),并將結(jié)果發(fā)布到一個單獨的MQTT主題中,即fan/anomaly。


          import?timeimport requestsimport randomimport datetimeimport jsonimport osimport paho.mqtt.client as mqtt broker_address = os.getenv('MQTT_HOST')dev_topic = os.getenv('MQTT_DEV_TOPIC')pred_topic = os.getenv('MQTT_PREDICT_TOPIC')scoring_url=os.getenv('SCORING_URL')d={} client = mqtt.Client("pdm")client.connect(broker_address) def on_message(mosq, obj, msg):    rotation=json.loads(msg.payload)["rotation"]    temperature=json.loads(msg.payload)["temperature"]    vibration=json.loads(msg.payload)["vibration"]    sound=json.loads(msg.payload)["sound"]    telemetry=[rotation,temperature,vibration,sound]    data={"params":telemetry}        response = requests.post(scoring_url, json=data)    fault=json.loads(response.text)["fault"]     d["deviceID"]=json.loads(msg.payload)["deviceID"]    d["fault"]=fault     payload = json.dumps(d, ensure_ascii=False)    print(payload)    client.publish(pred_topic,payload)    def on_subscribe(mosq, obj, mid, granted_qos):    print("Subscribed: " + str(mid) + " " + str(granted_qos)) client.on_message = on_messageclient.on_subscribe = on_subscribeclient.connect(broker_address)client.subscribe(dev_topic, 0) while True:    client.loop()


          SCORING_URL是異常檢測推理服務(wù)的一個端點。通過Flask網(wǎng)絡(luò)服務(wù)暴露了一個在TensorFlow中訓練的深度學習模型。


          下面是預測服務(wù)發(fā)布到MQTT主題的有效載荷:



          訓練異常檢測模型


          用一個超過20000個數(shù)據(jù)點的歷史數(shù)據(jù)集來訓練異常檢測模型。



          從數(shù)據(jù)集中觀察到,在故障發(fā)生前的幾個小時,風扇的轉(zhuǎn)速會降低并伴隨著振動、聲音、溫度值的增加。


          轉(zhuǎn)速數(shù)據(jù)的散點圖直觀地顯示了這一點。風扇的轉(zhuǎn)速從正常的平均600轉(zhuǎn)下降到400轉(zhuǎn)。



          基于此,我們可以輕松地訓練一個簡單的TensorFlow邏輯回歸模型來預測故障風扇。我們先去掉時間戳和設(shè)備ID列。


          dataframe?=?pandas.read_csv("../data/fan.csv",?header=None,skiprows=1)del dataframe[0]del dataframe[1]


          分離特征和標簽后,再將數(shù)據(jù)集分為訓練數(shù)據(jù)和測試數(shù)據(jù)。


          dataset = dataframe.valuesX = dataset[:,0:4].astype(float)y = dataset[:,4]X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33)


          然后我們創(chuàng)建一個4層神經(jīng)網(wǎng)絡(luò),做邏輯回歸。


          model?=?Sequential()model.add(Dense(60, input_dim=4, activation='relu'))model.add(Dense(30, activation='relu'))model.add(Dense(10, activation='relu'))model.add(Dense(1, activation='sigmoid'))model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])model.fit(X_train, y_train, epochs=250, batch_size=32, verbose=0)


          最后,該模型被保存和評估。


          model.save("../model")loss, acc = model.evaluate(X_test, y_test, verbose=0)print('Test Accuracy: %.3f' % acc)


          保存到磁盤上的TensorFlow模型被推理服務(wù)加載,然后對預測器微服務(wù)發(fā)送的數(shù)據(jù)進行預測。


          時間序列數(shù)據(jù)和可視化


          InfluxDB的實例通過Telegraf與Mosquitto連接。這種配置為我們提供了一個優(yōu)雅的機制,可以在不寫代碼的情況下將時間序列數(shù)據(jù)攝入InfluxDB。


          下面是連接Mosquitto和InfluxDB的Telegraf配置:


          ??[agent]      interval = "10s"      round_interval = true      metric_batch_size = 1000      metric_buffer_limit = 10000      collection_jitter = "0s"      flush_jitter = "0s"      debug = false      quiet = false      hostname = ""      omit_hostname = true     [[outputs.influxdb]]       urls = ["http://influxdb:8086"]      database = "fan"      retention_policy = "autogen"      precision = "s"      timeout = "5s"     [[outputs.file]]    files = ["stdout"]    data_format = "influx"     [[inputs.mqtt_consumer]]      servers = ["tcp://mosquitto:1883"]      qos = 0       topics = [        "fan/#"      ]       insecure_skip_verify = true      client_id = ""      data_format = "json"      name_override = "fan"      tag_keys = ["deviceID"]      json_string_fields = ["rotation","temperature","vibration","sound","fault"]


          現(xiàn)在可以從InfluxDB查詢時間序列數(shù)據(jù)。



          最后,我們將Grafana儀表盤連接到InfluxDB,為我們的AIoT解決方案構(gòu)建一個直觀的可視化面板。



          在本教程的下一部分,我將討論部署架構(gòu)以及基于K3s、Calico和Portworx的存儲和網(wǎng)絡(luò)。保持關(guān)注喲!



          推薦閱讀

          1款開源工具,實現(xiàn)自動化升級K3S集群!

          K3s+Sysdig,8分鐘部署并保護集群安全!

          領(lǐng)跑開源創(chuàng)新,K3s入選InfoQ 2020 年度十大開源新銳項目



          About k3s


          k3s 是首個進入 CNCF 沙箱項目的 K8S 發(fā)行版,同時也是當前全球用戶量最大的 CNCF 認證輕量級 K8S 發(fā)行版。自2019年3月發(fā)布以來,備受全球開發(fā)者們關(guān)注,至今GitHub Star數(shù)已超過 14,700,成為了開源社區(qū)最受歡迎的邊緣計算 K8S 解決方案。截至目前,K3s全球下載量超過100萬次,每周平均被安裝超過2萬次,其中30%的下載量來自中國。


          k3s 專為在資源有限的環(huán)境中運行 Kubernetes 的研發(fā)和運維人員設(shè)計,將滿足日益增長的在邊緣計算環(huán)境中運行在 x86、ARM64 和 ARMv7 處理器上的小型、易于管理的 Kubernetes 集群需求。k3s 的發(fā)布,為開發(fā)者們提供了以“Rancher 2.X + k3s”為核心的從數(shù)據(jù)中心到云到邊到端的 K8S 即服務(wù)(Kubernetes-as-a-Service),推動 Kubernetes Everywhere。

          掃碼添加k3s中文社區(qū)助手

          加入官方中文技術(shù)社區(qū)

          官網(wǎng):https://k3s.io

          瀏覽 38
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产激情原创 | 一级黄色AA片 | 欧美性猛交XXXX乱大交 | 天天干人人| 不卡影院亚洲 |