女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

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

邊緣計算中的機(jī)器學(xué)習(xí):基于 Linux 系統(tǒng)的實(shí)時推理模型部署與工業(yè)集成!

上海晶珩電子科技有限公司 ? 2025-06-11 17:22 ? 次閱讀

你好,旅行者!歡迎來到 Medium 的這一角落。在本文中,我們將把一個機(jī)器學(xué)習(xí)模型(神經(jīng)網(wǎng)絡(luò))部署到邊緣設(shè)備上,利用從 Modbus TCP 寄存器獲取的實(shí)時數(shù)據(jù)來預(yù)測一臺復(fù)古音頻放大器的當(dāng)前健康狀況。你將學(xué)習(xí)如何訓(xùn)練模型、導(dǎo)出模型,并在基于 Linux 的系統(tǒng)上運(yùn)行實(shí)時推理,并通過MQTT 發(fā)布結(jié)果。這是一個簡單但完整的流程——從工作站上的建模到在邊緣設(shè)備上運(yùn)行工業(yè)風(fēng)格的推理。

雖然需要了解 Linux、基礎(chǔ)網(wǎng)絡(luò)、Python 和機(jī)器學(xué)習(xí)包的使用,但本文提供了示例代碼,你可以按自己的節(jié)奏逐行學(xué)習(xí)。

架構(gòu)

首先,在開始之前我們需要將想法具體化。經(jīng)過了一次長達(dá) 5 分鐘、令人筋疲力盡的頭腦風(fēng)暴后,我們可能已經(jīng)有了一個大致的方向。然而,在推進(jìn)之前,建議先為我們的項(xiàng)目定義一個架構(gòu)。

無論是出于個人目標(biāo)、學(xué)術(shù)實(shí)踐還是實(shí)際商業(yè)案例項(xiàng)目,擁有一個路線圖,明確我們要去哪里、為什么去以及如何去,都是非常有幫助的。

硬件堆棧

有哪些硬件可用?軟件提供了更多的靈活性,通常有不同的選項(xiàng)來做同樣的事情,但是這種額外的好處大部分時間取決于我們的項(xiàng)目可以使用什么樣的硬件。也許我們在家里沒有太多的選擇,只有一些主板,或者在專業(yè)環(huán)境中,客戶的項(xiàng)目預(yù)算可能會定義為確定的解決方案可以購買哪種設(shè)備。

我們所需的硬件包括:

筆記本電腦/工作站(這些測試使用 Windows 操作系統(tǒng),但如果你愿意并知道如何操作,可以在任何 Linux 發(fā)行版上使用等效軟件)

樹莓派3,甚至可能是 2

以太網(wǎng)電纜

軟件堆棧

好的,在定義了一個友好且易于訪問的硬件設(shè)置后,讓我們來談?wù)勡浖?/p>

樹莓派模塊使用 Raspbian 作為其操作系統(tǒng),實(shí)際上它只是 Debian 的一種變體,而 Debian 是一種 Linux 發(fā)行版(意味著它使用 Linux 內(nèi)核)。

a51fe1d0-46a5-11f0-986f-92fbcf53809c.png

有些 Linux 發(fā)行版確實(shí)非常專注于特定領(lǐng)域的適配,但幸運(yùn)的是,Debian 和 Raspbian 是最流行且易于訪問的發(fā)行版之一。它們之間有很多不同,但要知道著名的 Ubuntu 操作系統(tǒng)也是基于 Debian 的。

這意味著我們可以輕松地從全球社區(qū)中找到大量軟件來實(shí)現(xiàn)我們的目標(biāo)(或?qū)⑵渥鳛闃?gòu)建的工具或自己的工具)。

在本例中,我們將使用:

- Python 3.9+,作為編程語言

- pyModbusTCP,用于通過 ModbusTCP 工業(yè)協(xié)議進(jìn)行通信

- paho-mqtt,用于通過 MQTT 發(fā)布/訂閱協(xié)議進(jìn)行通信(在物聯(lián)網(wǎng)應(yīng)用中非常流行)

- tensorflow & scikit-learn,用于開發(fā)、訓(xùn)練和導(dǎo)出/導(dǎo)入/使用推理模型

- joblib,幫助我們導(dǎo)入導(dǎo)出的模型

- numpy,幫助我們管理模型中的數(shù)值數(shù)據(jù)結(jié)構(gòu),是機(jī)器學(xué)習(xí)中非常強(qiáng)大且必不可少的庫

- pandas,用于數(shù)據(jù)管理和處理,對數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)也非常有用

- matplotlib,用于可視化:生成圖表和繪圖

- Mosquitto Broker,一個可靠的 MQTT 代理,用于發(fā)布我們的模型結(jié)果

- QModMaster,一個 ModbusTCP 主站模擬器,用于測試我們的主/從通信

a53020e0-46a5-11f0-986f-92fbcf53809c.jpg

先決條件配置和安裝

在繼續(xù)之前,最好先準(zhǔn)備好一切。你也可以稍后再回顧這一部分,但提前做好準(zhǔn)備將有助于你順利地跟隨本文的進(jìn)度。攜手共進(jìn)吧。

在筆記本電腦/工作站上:

1.確保系統(tǒng)上已安裝 Python,如果沒有,請從 此處 下載并按照推薦的官方安裝說明進(jìn)行安裝。

https://www.python.org/downloads/release/python-3100/

2.在 Documents 目錄下啟動一個 shell 或?qū)Ш降皆撃夸?/p>

cdDocuments

為本項(xiàng)目創(chuàng)建一個目錄并導(dǎo)航到該目錄:

mkdirml_edge_projectcdml_edge_project

創(chuàng)建一個 Python 虛擬環(huán)境:

python-m venv .venv

激活虛擬環(huán)境:

sourceactivate venv

下載并安裝所需的 Python 庫/包:

pipinstall paho-mqtt pandas numpy scikit-learn tensorflow matplotlib

下載并解壓 QModMaster 桌面應(yīng)

https://sourceforge.net/projects/qmodmaster/

a53bfbb8-46a5-11f0-986f-92fbcf53809c.png

使用靜態(tài) IPv4 地址配置機(jī)器的以太網(wǎng)端口。本例中使用 192.168.1.200。

a546284a-46a5-11f0-986f-92fbcf53809c.png

在樹莓派上:

1.確保系統(tǒng)上已安裝 Python,如果沒有,請從 此處 下載并按照推薦的官方安裝說明進(jìn)行安裝。

https://www.python.org/downloads/release/python-3100/

2.在 Documents 目錄下啟動一個 shell :

cdDocuments

為本項(xiàng)目創(chuàng)建一個目錄并導(dǎo)航到該目錄:

mkdirml_edge_projectcdml_edge_project

創(chuàng)建一個 Python 虛擬環(huán)境:

python-m venv .venv

激活虛擬環(huán)境:

sourceactivate venv

下載并安裝所需的 Python 庫/包:

pipinstall pyModbusTCP paho-mqtt tensorflow joblib numpy

下載、安裝并啟用 Mosquitto MQTT Broker:

sudo apt update && sudo apt upgradesudo apt install -y mosquitto mosquitto-clientssudo systemctlenablemosquitto.service

驗(yàn)證 Mosquitto 安裝(打印版本):

mosquitto-v

配置訪問(基本上允許所有訪問,僅用于測試):

sudo nano /etc/mosquitto/mosquitto.conf

在文件末尾插入以下行:

listener1883allow_anonymoustrue

保存并退出。

1.使用靜態(tài) IPv4 地址配置邊緣設(shè)備的以太網(wǎng)端口。本例中使用 192.168.1.75。

a554008c-46a5-11f0-986f-92fbcf53809c.png

圖表

我們已經(jīng)有了硬件和軟件列表,現(xiàn)在讓我們以視覺化的方式呈現(xiàn),以便于后續(xù)跟進(jìn)。

此圖表以更有趣、清晰和高效的方式包含了我們剛才指定的所有內(nèi)容。

a55d2248-46a5-11f0-986f-92fbcf53809c.png

數(shù)據(jù)映射

任何項(xiàng)目都需要一個數(shù)據(jù)映射。它可以簡單到一張標(biāo)注了“輸入和輸出”的餐巾紙,也可以是一張更專業(yè)、更美觀的表格/文檔,包含各種列,如名稱、標(biāo)簽、數(shù)據(jù)類型、協(xié)議、寄存器、源、目標(biāo)、描述等。

讓我們使用這個用于我們的實(shí)踐:

a572c2d8-46a5-11f0-986f-92fbcf53809c.png

Modbus TCP

我們知道推理服務(wù)的輸入數(shù)據(jù)將來自一個 ModbusTCP 主站(由 QModMaster 模擬),該主站將寫入我們虛擬 ModbusTCP 從站設(shè)備的寄存器。然后,我們將循環(huán)讀取這些寄存器中的數(shù)據(jù),將其從兩個獨(dú)立的 16 位寄存器轉(zhuǎn)換為一個單一的 32 位浮點(diǎn)值,以便我們的模型更容易處理。

在先決條件步驟中,我們已經(jīng)準(zhǔn)備好了環(huán)境,現(xiàn)在開始工作。

在工作目錄中,創(chuàng)建一個名為 ml_edge_service.py 的文件,并使用你喜歡的編碼 IDE 或文本編輯器插入以下代碼:

frompyModbusTCP.clientimportModbusClientimportstructimporttime

# Modbus Clientmodbus_client = ModbusClient(host="192.168.1.75", port=502, auto_open=True)# Function to read 32-bit float from 2 Modbus registersdefread_float(start_address): regs = modbus_client.read_holding_registers(start_address,2) ifregs: returnstruct.unpack('>f', struct.pack('>HH', regs[0], regs[1]))[0] returnNone

MQTT

為了使我們的模型推理結(jié)果可用,我們可以將它們發(fā)布到我們想要的任何 MQTT 主題(只要遵循主題命名和語法規(guī)則),但首先我們需要讓 Mosquitto MQTT 代理運(yùn)行起來。

為此,我們現(xiàn)在修改 ml_edge_service.py,添加 MQTT 發(fā)布函數(shù),使其看起來像這樣:

importpaho.mqtt.clientasmqtt

# MQTT Clientmqtt_client= mqtt.Client()mqtt_client.connect("localhost",1883,60)

我們的 ml_edge_service.py 文件已經(jīng)部分準(zhǔn)備好了,它還需要核心部分,即推理模型。我們先保存腳本,然后繼續(xù)處理它。

數(shù)據(jù)

首先,我們獲取實(shí)踐項(xiàng)目的數(shù)據(jù) data.csv,并將其放在與 ml_edge_service.py 腳本相同的目錄中。此數(shù)據(jù)已經(jīng)過清理,但要知道在實(shí)際問題中,數(shù)據(jù)工程過程確實(shí)是問題的一部分。數(shù)據(jù)幾乎從來不會從源頭直接變得干凈。

下載復(fù)古放大器健康數(shù)據(jù)集 >>> [此處]

https://drive.google.com/drive/folders/1wO_uaqUrUKWfm77W35Jeu5Qe64ujZRlE?usp=sharing

對于建模階段,我們將使用 data.csv 文件。

讓我們在工作目錄中創(chuàng)建一個名為 model.py 的新腳本,并開始編寫第一行代碼。添加以下內(nèi)容:

importpandasaspdimportnumpyasnpfromsklearn.model_selectionimporttrain_test_splitfromsklearn.preprocessingimportLabelEncoder,StandardScalerimportjoblib

# Load and encode datasetdf= pd.read_csv("data.csv")le = LabelEncoder()df['status_encoded'] = le.fit_transform(df['status'])# Features and labelsX = df.drop(['status','status_encoded'], axis=1).valuesy =df['status_encoded'].values# Normalizescaler = StandardScaler()X_scaled = scaler.fit_transform(X)joblib.dump(scaler,"scaler.save")# SplitX_train, X_temp, y_train, y_temp = train_test_split(X_scaled, y, test_size=0.3, random_state=42)X_val, X_test, y_val, y_test = train_test_split(X_temp, y_temp, test_size=0.5, random_state=42)

構(gòu)建

現(xiàn)在,是時候定義我們模型的結(jié)構(gòu)了。由于在這個實(shí)踐項(xiàng)目中我們處理的是非線性關(guān)系和數(shù)值輸入,我們將使用一個簡單的神經(jīng)網(wǎng)絡(luò)(順序密集層)。這些網(wǎng)絡(luò)通常足以接收連續(xù)的傳感器輸入并輸出離散狀態(tài),同時保持復(fù)雜性較低。

a57df022-46a5-11f0-986f-92fbcf53809c.png

將以下代碼塊插入到 model.py 腳本中:

# MODEL BUILDING STAGE# ---------------------importtensorflowastf

model= tf.keras.Sequential([ tf.keras.layers.Dense(64, activation='relu', input_shape=(5,)), tf.keras.layers.Dense(32, activation='relu'), tf.keras.layers.Dense(16, activation='relu'), tf.keras.layers.Dense(4, activation='softmax')])model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])

這個模型架構(gòu)對于測試目的來說應(yīng)該足夠了。讓我們繼續(xù)添加訓(xùn)練邏輯。

訓(xùn)練

為了訓(xùn)練我們的模型,讓我們添加以下代碼塊:

# TRAINING STAGE# --------------history= model.fit(X_train, y_train, epochs=50, validation_data=(X_val, y_val))

在這里,我們將訓(xùn)練模型 50 個 epoch(數(shù)據(jù)是合成的且規(guī)模較小,因此學(xué)習(xí)速度會很快),并存儲指標(biāo)歷史記錄,然后繪制/分析它們并評估模型的訓(xùn)練/驗(yàn)證性能。

測試

訓(xùn)練后,我們想在未見過的數(shù)據(jù)(除了驗(yàn)證數(shù)據(jù)之外)上測試我們的模型,因此讓我們添加一些代碼:

# TESTING STAGE# -------------

importmatplotlib.pyplotasplt# Evaluate the model on test dataloss, acc = model.evaluate(X_test, y_test)print(f"Test Accuracy:{acc:.2f}")# Plot training historyplt.figure(figsize=(12,5))# Accuracy plotplt.subplot(1,2,1)plt.plot(history.history['accuracy'], label='Train Acc')plt.plot(history.history['val_accuracy'], label='Val Acc')plt.title('Model Accuracy')plt.xlabel('Epoch')plt.ylabel('Accuracy')plt.legend()plt.grid(True)# Loss plotplt.subplot(1,2,2)plt.plot(history.history['loss'], label='Train Loss')plt.plot(history.history['val_loss'], label='Val Loss')plt.title('Model Loss')plt.xlabel('Epoch')plt.ylabel('Loss')plt.legend()plt.grid(True)# Save and show the plotplt.tight_layout()plt.savefig("training_history.png")plt.show()

導(dǎo)出

現(xiàn)在,讓我們在測試完成后添加幾行代碼來導(dǎo)出我們的模型,以便我們可以在目標(biāo)設(shè)備(ED-IPC/RasPi)上使用它。

# EXPORTATION STAGE# ------------------model.save("amp_model.h5")

完成的 model.py 腳本

importpandasaspdimportnumpyasnpfromsklearn.model_selectionimporttrain_test_splitfromsklearn.preprocessingimportLabelEncoder,StandardScalerimporttensorflowastfimportjoblibimportmatplotlib.pyplotasplt

# Load datadf= pd.read_csv("data.csv")# Encode targetle = LabelEncoder()df['status_encoded'] = le.fit_transform(df['status'])# Features and labelsX = df.drop(['status','status_encoded'], axis=1).valuesy =df['status_encoded'].values# Normalize featuresscaler = StandardScaler()X_scaled = scaler.fit_transform(X)joblib.dump(scaler,"scaler.save")# Split datasetX_train, X_temp, y_train, y_temp = train_test_split(X_scaled, y, test_size=0.3, random_state=42)X_val, X_test, y_val, y_test = train_test_split(X_temp, y_temp, test_size=0.5, random_state=42)# Build modelmodel = tf.keras.Sequential([ tf.keras.layers.Dense(64, activation='relu', input_shape=(5,)), tf.keras.layers.Dense(32, activation='relu'), tf.keras.layers.Dense(16, activation='relu'), tf.keras.layers.Dense(4, activation='softmax')])model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])# Train modelhistory= model.fit(X_train, y_train, epochs=50, validation_data=(X_val, y_val))# Evaluate modelloss, acc = model.evaluate(X_test, y_test)print(f"Test Accuracy: {acc:.2f}")# Plot training historyplt.figure(figsize=(12, 5))# Accuracy plotplt.subplot(1, 2, 1)plt.plot(history.history['accuracy'], label='Train Acc')plt.plot(history.history['val_accuracy'], label='Val Acc')plt.title('Model Accuracy')plt.xlabel('Epoch')plt.ylabel('Accuracy')plt.legend()plt.grid(True)# Loss plotplt.subplot(1, 2, 2)plt.plot(history.history['loss'], label='Train Loss')plt.plot(history.history['val_loss'], label='Val Loss')plt.title('Model Loss')plt.xlabel('Epoch')plt.ylabel('Loss')plt.legend()plt.grid(True)# Save and show the plotplt.tight_layout()plt.savefig("training_history.png")plt.show()# Export modelmodel.save("amp_model.h5")

太好了。我們的代碼已經(jīng)準(zhǔn)備好運(yùn)行了!完整的流程應(yīng)該導(dǎo)入并準(zhǔn)備我們的數(shù)據(jù)集,構(gòu)建模型,訓(xùn)練它(同時運(yùn)行驗(yàn)證),測試它,給我們一些指標(biāo),并將模型保存為文件。

a5a081c8-46a5-11f0-986f-92fbcf53809c.png

在上面,你可以看到我從這個流程中得到的結(jié)果,它足夠好,可以在線測試(將其部署為服務(wù)運(yùn)行),這顯然是因?yàn)槲覀兊臄?shù)據(jù)集是合成的。

部署

從 Python 腳本調(diào)用導(dǎo)出的模型

好的,讓我們回到 ml_edge_service.py 腳本,并添加幾行缺失的代碼。

這些行將負(fù)責(zé)加載我們之前導(dǎo)出的模型,并使其隨時可以接收數(shù)據(jù)并輸出一些推理結(jié)果,當(dāng)然,是作為服務(wù)持續(xù)運(yùn)行的。

添加以下內(nèi)容:

importtensorflowastfimportnumpyasnpimportjoblib

# Load model and scalermodel = tf.keras.models.load_model("amp_model.h5")scaler = joblib.load("scaler.save")labels = ["healthy","unstable","overdriven","failsoon"]while True: plate_voltage = read_float(0) bias_voltage = read_float(2) heater_current = read_float(4) output_thd = read_float(6) impedance = read_float(8) if None not in (plate_voltage, bias_voltage, heater_current, output_thd, impedance): X = np.array([[plate_voltage, bias_voltage, heater_current, output_thd, impedance]]) X_scaled = scaler.transform(X) prediction = model.predict(X_scaled) label = labels[np.argmax(prediction)] mqtt_client.publish("amp/inference", label) time.sleep(1)

完成的 ml_edge_service.py 腳本

這是最終的 ml_edge_service.py 腳本的樣子:

frompyModbusTCP.clientimportModbusClientimporttimeimportstructimporttensorflowastfimportnumpyasnpimportjoblibimportpaho.mqtt.clientasmqtt

# Modbus Clientmodbus_client = ModbusClient(host="192.168.1.75", port=502, auto_open=True)# MQTT Clientmqtt_client = mqtt.Client()mqtt_client.connect("localhost",1883,60)# Load model and scalermodel = tf.keras.models.load_model("amp_model.h5")scaler = joblib.load("scaler.save")# Function to read 32-bit float from 2 Modbus registersdefread_float(start_address): regs = modbus_client.read_holding_registers(start_address,2) ifregs: returnstruct.unpack('>f', struct.pack('>HH', regs[0], regs[1]))[0] returnNonelabels = ["healthy","unstable","overdriven","failsoon"]whileTrue: plate_voltage = read_float(0) bias_voltage = read_float(2) heater_current = read_float(4) output_thd = read_float(6) impedance = read_float(8) ifNonenotin(plate_voltage, bias_voltage, heater_current, output_thd, impedance): X = np.array([[plate_voltage, bias_voltage, heater_current, output_thd, impedance]]) X_scaled = scaler.transform(X) prediction = model.predict(X_scaled) label = labels[np.argmax(prediction)] mqtt_client.publish("amp/inference", label) time.sleep(1)

將 Python 腳本執(zhí)行設(shè)置為系統(tǒng)服務(wù)

我們的 ml_edge_service.py 腳本現(xiàn)在已經(jīng)完成了,不可避免地,現(xiàn)在讓我們將其配置為作為系統(tǒng)服務(wù)運(yùn)行。

為了實(shí)現(xiàn)這一點(diǎn),讓我們在 systemd 目錄中直接創(chuàng)建一個名為 ml_edge_service.service 的服務(wù)文件(你可能需要 sudo 權(quán)限來執(zhí)行此操作):

sudo nano/etc/systemd/system/ml_edge_service.service

將以下代碼粘貼到其中:

[Unit]Description= ML Amplifier Health Inference Model ServiceAfter=network.target

[Service]ExecStart=/usr/bin/python3 /home/pi/Documents/ml_edge_project/ml_edge_service.pyWorkingDirectory=/home/pi/Documents/ml_edge_project/Restart=alwaysUser=pi[Install]WantedBy=multi-user.target

保存并退出,現(xiàn)在它位于其他服務(wù)所在的位置。你現(xiàn)在可以在打開的系統(tǒng) shell 中使用以下命令來啟動它:

sudo systemctl daemon-reexecsudo systemctl daemon-reloadsudo systemctlenableml_edge_servicesudo systemctl start ml_edge_service

你可以使用以下命令來監(jiān)控服務(wù):

sudosystemctl status ml_edge_service

還可以使用以下命令來停止和重啟服務(wù):

sudosystemctl stop ml_edge_servicesudo systemctl restart ml_edge_service

使用 QModMaster 喂養(yǎng)和測試推理模型服務(wù)

現(xiàn)在,我們已經(jīng)在邊緣設(shè)備(ED-IPC/RasPi)上啟動并運(yùn)行了服務(wù),等待一些數(shù)據(jù)來輸入,讓我們啟動一個 QModMaster 實(shí)例,并將其設(shè)置為向我們的 ModbusTCP 從站(在邊緣設(shè)備上)寫入值。

首先,配置目標(biāo)從站 IP,并確保設(shè)置正確,如下所示。

a5b4dd26-46a5-11f0-986f-92fbcf53809c.png

然后繼續(xù)連接,并啟用循環(huán)更新。之后開始寫入值,使用圖像中的示例作為第一個示例,或使用之前與 data.csv 文件一起提供的 test_samples.csv 文件中的任何示例。

a5b4dd26-46a5-11f0-986f-92fbcf53809c.png

我正在使用下面顯示的示例行。我們預(yù)計會收到模型對該輸入數(shù)據(jù)的推理結(jié)果為“healthy”。

a5cf7c80-46a5-11f0-986f-92fbcf53809c.png

服務(wù)應(yīng)該自動讀取并處理 ModbusTCP 從站寄存器中的數(shù)據(jù),將其輸入到模型中,并輸出一些結(jié)果供我們查看。讓我們找出如何查看它們。

監(jiān)控

CLI 應(yīng)用讀取并打印結(jié)果

我們知道,現(xiàn)在我們的模型結(jié)果正在發(fā)布到 amp/inference 主題,并且可以在運(yùn)行在邊緣設(shè)備(ED-IPC/RasPi)上的 Mosquitto MQTT 代理的地址上獲取。因此,讓我們從筆記本電腦/工作站上讀取它們,就像我們是一個試圖獲取并利用這些結(jié)果的客戶端一樣。

在你的筆記本電腦/工作站工作目錄中創(chuàng)建一個名為 ml_edge_monitoring.py 的腳本,并插入以下代碼:

importpaho.mqtt.clientasmqtt

def on_message(client, userdata, msg): print(f"[INFERENCE] {msg.payload.decode()}")mqtt_client = mqtt.Client()mqtt_client.connect("192.168.1.75",1883,60)mqtt_client.subscribe("amp/inference")mqtt_client.on_message = on_messagemqtt_client.loop_forever()

現(xiàn)在運(yùn)行腳本,你應(yīng)該會看到模型結(jié)果定期輸出,實(shí)際上幾乎是實(shí)時的(不要太認(rèn)真對待實(shí)時部分)。

a5d8c7d6-46a5-11f0-986f-92fbcf53809c.png

……就這樣,一個完全功能的機(jī)器學(xué)習(xí)推理模型作為服務(wù)運(yùn)行在基于 Linux 的邊緣設(shè)備上,供你使用!不過,先別急著賣掉它。還有很多事情要做……

不管如何,恭喜你!我為你達(dá)到這一點(diǎn)感到驕傲,冠軍。

機(jī)會領(lǐng)域

還有許多其他事情我希望我能在本文中包含。這些可能是未來的主題,但這里有一些,你可以自己探索并打造一個殺手級的機(jī)器學(xué)習(xí)邊緣服務(wù)。

OPC UA

a5ee00ec-46a5-11f0-986f-92fbcf53809c.png

集成 OPC UA 客戶端功能,以實(shí)現(xiàn)更多工業(yè)通信協(xié)議兼容性。這是一個非常流行且廣泛用于全球大型企業(yè) OT 網(wǎng)絡(luò)的行業(yè)標(biāo)準(zhǔn)協(xié)議。

使用 Python 的 opcua 庫來利用這一點(diǎn)。

Docker

a5f7d9be-46a5-11f0-986f-92fbcf53809c.png

在不同設(shè)備或系統(tǒng)上運(yùn)行遇到困難?不用擔(dān)心,Docker 容器可以幫助你!

它們還可以為更高效的 CI/CD 管道提供方法,這將有利于你的模型部署。

甚至可以使用 Kubernetes 來編排這些容器,使一切穩(wěn)定且可擴(kuò)展。

FastAPI

a6053f78-46a5-11f0-986f-92fbcf53809c.png

一個聰明的方法是將數(shù)據(jù)提供給許多不同的應(yīng)用程序,那就是提供一個 HTTP 服務(wù)器,該服務(wù)器響應(yīng)你模型結(jié)果或指標(biāo)的請求。非常適合監(jiān)控和結(jié)果可視化(儀表板?)。

Dashboard

a60ff580-46a5-11f0-986f-92fbcf53809c.png

使用 Plotly 或 Grafana 等工具制作一些儀表板,有很多工具可供選擇。每個人都喜歡一個外觀美觀、信息量和細(xì)節(jié)恰到好處的 UI。

Database

a62002f4-46a5-11f0-986f-92fbcf53809c.png

也許可以添加一個地方來存儲你的模型結(jié)果和性能指標(biāo)?數(shù)據(jù)庫將是一個理想的選擇!

SQLite 適合小型部署,或者你可以使用 PostgreSQL 來構(gòu)建一個更大、更健壯的平臺。

日志記錄

厭倦了需要關(guān)注 CLI 結(jié)果和指標(biāo)流,那就記錄它們,以后再查看!或者甚至捕獲運(yùn)行時錯誤以供未來調(diào)試。

基本的日志文件變得太大,或飽和得太快?使用旋轉(zhuǎn)日志文件!這些日志文件允許你擁有可覆蓋的日志文件(甚至在達(dá)到大小限制時生成自定義數(shù)量的備份),它們會自我循環(huán),不會隨著時間的推移占用更多空間,而且永遠(yuǎn)不會停止。

在某些情況下,非常適合設(shè)置后忘記。

推薦

從一開始就了解你的數(shù)據(jù)的性質(zhì)、屬性和質(zhì)量

本項(xiàng)目只是一個快速而有趣的提案,用于測試在工業(yè)環(huán)境中如果以適當(dāng)和健壯的方式實(shí)現(xiàn),可能會使用的各種技術(shù)。然而,要實(shí)現(xiàn)這種健壯性,最重要的步驟之一是確保你了解你的數(shù)據(jù)?;ㄒ恍r間探索它,查看歷史記錄,了解其細(xì)微差別。

例如:

為什么我的數(shù)據(jù)中存在間隙?

為什么每隔一段時間就會出現(xiàn)如此怪異的峰值?

為什么在應(yīng)該是數(shù)值輸入的地方收到了字符串?

還有很多類似(或更糟(或更有趣))的例子

聽起來很可笑,但這種情況比你想象的更常見。即使在專業(yè)環(huán)境中也是如此。

進(jìn)行測試并構(gòu)建健壯的管道(在數(shù)據(jù)到達(dá)你的模型之前)

考慮到最后一個建議,將幫助你意識到項(xiàng)目特定的問題,并因此促使你嘗試(并成功,耶?。囊婚_始就開發(fā)出防錯的管道,因?yàn)橛涀?,即使模型正在運(yùn)行并輸出一些東西,也不意味著它是正確的。

原文地址:

https://medium.com/mcd-unison/machine-learning-on-the-edge-real-time-inference-model-deployment-and-industrial-integration-with-af7f2e5244dehttps://www.makeuseof.com/raspberry-pi-5-overclocking-guide/

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

    關(guān)注

    4

    文章

    604

    瀏覽量

    28339
  • 機(jī)器學(xué)習(xí)

    關(guān)注

    66

    文章

    8493

    瀏覽量

    134156
  • 邊緣計算
    +關(guān)注

    關(guān)注

    22

    文章

    3289

    瀏覽量

    50593
收藏 人收藏

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    邊緣側(cè)部署模型優(yōu)勢多!模型量化解決邊緣設(shè)備資源限制問題

    電子發(fā)燒友網(wǎng)報道(文/李彎彎)大模型邊緣部署是將大模型部署邊緣設(shè)備上,以實(shí)現(xiàn)更快速、更低延遲
    的頭像 發(fā)表于 01-05 00:06 ?4952次閱讀

    AI模型部署邊緣設(shè)備的奇妙之旅:目標(biāo)檢測模型

    以及邊緣計算能力的增強(qiáng),越來越多的目標(biāo)檢測應(yīng)用開始直接在靠近數(shù)據(jù)源的邊緣設(shè)備上運(yùn)行。這不僅減少了數(shù)據(jù)傳輸延遲,保護(hù)了用戶隱私,同時也減輕了云端服務(wù)器的壓力。然而,在邊緣
    發(fā)表于 12-19 14:33

    超低功耗FPGA解決方案助力機(jī)器學(xué)習(xí)

    IoT應(yīng)用。通過提供結(jié)合了靈活、超低功耗FPGA硬件和軟件解決方案、功能全面的機(jī)器學(xué)習(xí)推理技術(shù),Lattice sensAI將加速網(wǎng)絡(luò)邊緣設(shè)備上傳感器數(shù)據(jù)處理和分析的
    發(fā)表于 05-23 15:31

    好奇~!谷歌的 Edge TPU 專用 ASIC 旨在將機(jī)器學(xué)習(xí)推理能力引入邊緣設(shè)備

    硬件定制,最終將其集成至各類商業(yè)產(chǎn)品當(dāng)中。作為產(chǎn)品開發(fā)工具,這款單片適用于那些希望在原型物聯(lián)網(wǎng)設(shè)備及其嵌入式系統(tǒng)快速引入機(jī)器學(xué)習(xí)
    發(fā)表于 03-05 21:20

    高性能的機(jī)器學(xué)習(xí)邊緣計算更給力-iMX8M Plus為邊緣計算賦能

    、智能零售、智能工廠和智慧城市等應(yīng)用領(lǐng)域而言是必不可少的。以前,機(jī)器學(xué)習(xí)需要成本昂貴而又復(fù)雜的云計算,也就是“基于云的人工智能”。但現(xiàn)在,很多機(jī)器學(xué)
    發(fā)表于 09-07 13:49

    高性能的機(jī)器學(xué)習(xí)邊緣計算更給力-iMX8M Plus為邊緣計算賦能

    、智能零售、智能工廠和智慧城市等應(yīng)用領(lǐng)域而言是必不可少的。以前,機(jī)器學(xué)習(xí)需要成本昂貴而又復(fù)雜的云計算,也就是“基于云的人工智能”。但現(xiàn)在,很多機(jī)器學(xué)
    發(fā)表于 09-07 13:55

    高性能的機(jī)器學(xué)習(xí)邊緣計算更給力-iMX8M Plus為邊緣計算賦能

    、智能零售、智能工廠和智慧城市等應(yīng)用領(lǐng)域而言是必不可少的。以前,機(jī)器學(xué)習(xí)需要成本昂貴而又復(fù)雜的云計算,也就是“基于云的人工智能”。但現(xiàn)在,很多機(jī)器學(xué)
    發(fā)表于 09-24 09:09

    高性能的機(jī)器學(xué)習(xí)邊緣計算更給力

    、智能零售、智能工廠和智慧城市等應(yīng)用領(lǐng)域而言是必不可少的。以前,機(jī)器學(xué)習(xí)需要成本昂貴而又復(fù)雜的云計算,也就是“基于云的人工智能”。但現(xiàn)在,很多機(jī)器學(xué)
    發(fā)表于 10-15 13:58

    如何用Arm虛擬硬件在Arm Cortex-M上部署PaddlePaddle

    推理模型  3. 使用TVMC為目標(biāo)設(shè)備編譯 Paddle 推理模型4. 構(gòu)建文本識別應(yīng)用程序并將其部署在 Arm Virtual帶有Arm Cortex-M55的硬件Corstone-300平臺  該項(xiàng)
    發(fā)表于 09-02 14:48

    部署基于嵌入的機(jī)器學(xué)習(xí)模型

    1、如何在生產(chǎn)中部署基于嵌入的機(jī)器學(xué)習(xí)模型  由于最近大量的研究,機(jī)器學(xué)習(xí)
    發(fā)表于 11-02 15:09

    使用rk3588多npu推理模型,模型推理時間還增加了,這怎么解釋

    使用rk3588多npu推理模型模型推理時間還增加了,這怎么解釋
    發(fā)表于 11-05 18:22

    一種基于機(jī)器學(xué)習(xí)的流簇大小推理模型

    數(shù)據(jù)中心網(wǎng)絡(luò)需要更加高效的推理模型提升流簇大小判斷的準(zhǔn)確性和敏感性。提岀了一種基于機(jī)器學(xué)習(xí)的流簇大小推理模型( Mlcoflow),利用極限學(xué)習(xí)
    發(fā)表于 04-02 11:38 ?34次下載
    一種基于<b class='flag-5'>機(jī)器</b><b class='flag-5'>學(xué)習(xí)</b>的流簇大小<b class='flag-5'>推理模型</b>

    英飛凌攜手SensiML為智能家居、健身和工業(yè)應(yīng)用提供傳感器數(shù)據(jù)并訓(xùn)練機(jī)器學(xué)習(xí)模型

    XENSIV? 傳感器獲取數(shù)據(jù)、訓(xùn)練機(jī)器學(xué)習(xí) (ML) 模型,并直接在超低功耗 PSoC? 6 微控制器 (MCU) 上部署
    發(fā)表于 02-11 10:44 ?1444次閱讀

    智譜GLM-Zero深度推理模型預(yù)覽版正式上線

    近日,智譜公司宣布其深度推理模型GLM-Zero的初代版本——GLM-Zero-Preview已正式上線。這款模型是智譜首個基于擴(kuò)展強(qiáng)化學(xué)習(xí)技術(shù)訓(xùn)練的推理模型,標(biāo)志著智譜在AI
    的頭像 發(fā)表于 01-02 10:55 ?469次閱讀

    詳解 LLM 推理模型的現(xiàn)狀

    領(lǐng)域的最新研究進(jìn)展,特別是自DeepSeekR1發(fā)布后興起的推理時間計算擴(kuò)展相關(guān)內(nèi)容。在LLM實(shí)施和改進(jìn)推理簡單來說,基于LLM的推理模型
    的頭像 發(fā)表于 04-03 12:09 ?321次閱讀
    詳解 LLM <b class='flag-5'>推理模型</b>的現(xiàn)狀