机器人行业数据闭环实践:从对象存储到 JuiceFS
JuiceFS 社區聚集了來自各行各業的前沿科技用戶。本次分享的案例來源于刻行,一家商用服務機器人領域科技企業。
商用服務機器人指的是我們日常生活中常見的清潔機器人、送餐機器人、倉庫機器人等。刻行采用 JuiceFS 來彌補對象存儲性能不足等問題。
值得一提的是,前不久社區版 v1.1 中發布的“克隆”功能,已經成功被應用于刻行數據版本管理之中,有效提升仿真訓練的效率。
在商用服務機器人領域,后期運維和開發工作至關重要。這包括監控機器人性能、執行定期維護、處理故障、進行軟件更新及數據管理等。這些環節產生將產生大量數據,數據處理效率對于降低企業成本和提高工作效率起著決定性作用。刻行專注于后期的運維環節,為機器人企業提供全方位的閉環數據服務,涵蓋從數據采集、存儲到數據的可視化和仿真訓練等多個功能。
01 什么是機器人的數據閉環
本文所指的機器人特指商用服務型機器人,如在商場中常見的自動清潔和送餐機器人。數據閉環是指收集終端用戶的軟件系統運行數據,以此來優化產品的功能和用戶體驗。
數據閉環如下圖所示,首先,機器人系統會捕捉并上傳現場問題相關的數據。這些數據,包括傳感器數據以及感知、規劃和控制方面的信息,都將被直接采集并用于后續處理。
接下來,工程師將著手解決現場問題,首要任務是將前一步驟中采集的數據進行可視化處理。這需要直接訪問存儲在 JuiceFS 的數據。
解決問題的開發迭代階段可能涉及機器人系統代碼的邏輯優化,或者是算法模型的調整,此時需利用傳感器數據進行標注和訓練。無論解決方案的類型如何,最終都必須通過仿真測試進行驗證,這就要求實現數據的版本化管理。
02 JuiceFS 在不同場景中的實踐
數據采集
機器人采集的數據量極大,例如我們服務的一位客戶,每日活躍設備數量達到數百臺,每次數據采集的持續時間為一分鐘,每分鐘產生的數據量可達數百兆。因此,每天的數據增量大約是幾百 GB。這些數據通常是非結構化的,因此將原始數據直接存儲在對象存儲中是極為合適的。
然而,對象存儲也有局限性。首先,從設計上講,它會根據鍵(key)自動進行分區。如果采用連續的前綴,很容易觸及其限制的查詢次數(QPS)。這一點在眾所周知的 OSS 和 S3 等服務中也有所體現,具體限制可以參照它們的官方文檔。
此外,若用戶希望通過 FUSE 將對象存儲用作文件系統,需要注意的是,類似 s3fs 這樣的開源工具在性能和兼容性方面表現一般。具體的特性對比可參考 JuiceFS 的文檔。
因此,我們正在尋找更優的存儲方案,期望它既能提供對象存儲的便利性,又能擁有更出色的性能表現。
我們最初接觸的工具是開源版的 Alluxio。然而,我們最終沒有選擇它,主要原因是其對 S3 和FUSE 協議的兼容性不足。以 S3 協議為例,它支持在讀取數據時進行范圍訪問,類似于文件系統的高效操作。最初,Alluxio 并不支持此功能,我本人在 2020 年接觸 Alluxio 時,曾提交過一個 PR 來解決這個問題,社區直到 2021 年才將其合并,我們最終決定放棄使用 Alluxio。此外,我們也嘗試過自主研發類似的系統。
后來,我們選擇使用 JuiceFS。JuiceFS 在設計上有效地規避了對象存儲的一些限制。例如,原始數據的查詢不依賴于對象存儲提供的 API,而是通過自動分散文件到對象存儲中來實現。此外,JuiceFS 的社區也非常活躍,開發者們對于問題的響應非常積極,這進一步促使我們采用了這個工具。
值得強調的是數據合規性問題,許多國內的機器人公司和制造業企業在出海時都會面臨數據合規性挑戰。由于國外的法律和法規通常要求數據必須在本地存儲,因此多云架構的使用變得不可避免。JuiceFS 在這方面表現出色,因為它不僅兼容多種對象存儲產品,而且非常適合在多云環境中作為存儲層使用。因此,對于那些在開發業務時面臨類似問題,需要采用多元化架構的企業來說,選擇 JuiceFS 可以有效減少由不同存儲產品帶來的復雜度和挑戰。
數據可視化
為了讓大家理解 JuiceFS 在數據可視化中的重要性,先簡單介紹一下機器人行業常見的原始數據存儲格式。大多數系統會采用類似于 ROS 或 MCAP 這樣的文件格式,這是在機器人系統實際運行過程中記錄并存儲數據的結構。
下圖展示了這一存儲結構。首先,會存儲一些文件的元數據。接下來是不同類型傳感器的 TOPIC,例如激光雷達和攝像頭各自對應一個 TOPIC。TYPE 會定義每個 TOPIC 的數據結構,例如激光雷達數據結構通常被稱為點云。TIME STAMP 記錄了傳感器采集數據的時間點。最后,存儲的是真實采集到的數據。因此,我們的設備采集的數據實際上按時間順序保存在系統中。
具體到數據可視化的實際應用場景,運維人員需要響應用戶提出的工單。在獲得用戶授權后,他們會主動向設備發送數據采集請求。隨后,所采集的數據需要被迅速訪問并可視化處理。在此過程中,JuiceFS 提供的緩存特性起到了關鍵作用,數據在寫入時同時建立緩存,方便在接下來的訪問中直接命中緩存,這個設計極大地提高了數據使用的效率。這種高效率的數據處理對于快速解決工單、提升用戶體驗至關重要。
此外,JuiceFS 在處理數據方面也展現出顯著優勢。由于原始數據的時序特征,在數據可視化過程中,大量的時序連續數據需要被順序讀取。JuiceFS 提供了預讀和預取功能(詳見 JuiceFS 緩存文檔),這使得計算資源得到了更有效的利用。具體來說,處理當前幀數據時,JuiceFS會自動預讀后續幀的數據。這樣的機制不僅提高了數據處理的效率,還節省了計算資源,從而使整個數據處理流程更為高效和流暢。
數據流水線
如下圖所示,我們首先通過 S3 網關將原始數據和待測試的軟件上傳至 JuiceFS 。隨后,通過設定的統一事件和規則,這些過程可自動或手動觸發。在我們的系統中,除了 S3 網關產生的事件外,還整合了內部系統的其他事件。所有的流水線(pipeline)操作均在我們的Kubernetes 集群中執行。對于有興趣深入了解如何在 Kubernets 集群中使用 JuiceFS 的用戶,建議參考 JuiceFS 文檔。
數據版本
如圖所示,每當我們進行軟件或模型的迭代仿真測試時,均需借助之前收集的傳感器數據。這些數據用于對比規劃和感知的結果,并通過特定指標進行評估。此過程的目的是判斷哪個結果更為優秀,進而生成新的數據集。這一過程體現了業務層面的數據處理和分析。通過這種方式,我們能夠精確地評估各個迭代步驟的效果,確保最終結果的優化和提升。
在具體的執行層面,當我們運行 Python 時,系統首先會指定掛載特定版本的數據。例如,在圖示中,系統掛載了最新的 HEAD 數據版本。接著,我們從執行的結果中篩選出更優的數據,以此形成一個新版本。在這個過程中,歷史版本的管理依賴于 JuiceFS 提供的克隆功能來實現。如果未來工程師需要對比或回退到某個歷史版本,他們可以直接掛載相應的文件版本。 JuiceFS 克隆功能,它只會創建新的元數據而不復制實際的存儲數據,這使得整個過程非常高效。這種方式不僅確保了數據版本的靈活管理,還大大減少了存儲空間的需求,提高了操作效率。
一般,單個數據集包含大約兩百個文件,總大小使得克隆操作的完成時間在一秒以內。鑒于版本創建并非頻繁進行的操作,這樣的性能是完全可以接受的。
此外,JuiceFS 克隆功能在移動或復制數據集時也表現出極高的效率,其使用場景和數據版本管理類似。然而,需要注意的是,克隆功能也有一定的限制,正如文檔中所介紹的,它更適用于包含大量小文件、操作頻繁的數據集。這種特性使得 JuiceFS 在處理這類特定數據集時尤為高效,而在其他場景下可能需要考慮其限制因素。
最后,我要特別感謝 JuiceFS 團隊為我們帶來了這樣一款卓越的產品,極大地促進了我們數據平臺的發展和業務的成功。
關于刻行
刻行是國內人工智能行業場景數據平臺的先驅者,通過簡化多模態場景智能的研發和運維流程,有效降低技術門檻,致力于解決自動駕駛、機器人、物聯網、增強現實等行業在復雜場景數據處理上的高成本和低效率問題。
希望這篇內容能夠對你有一些幫助,如果有其他疑問歡迎加入 JuiceFS 社區與大家共同交流。
總結
以上是生活随笔為你收集整理的机器人行业数据闭环实践:从对象存储到 JuiceFS的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 宽带网速慢路由器信号差(为什么路由器信号
- 下一篇: 华为一键root工具(华为如何root手