用 Supervisor 管理系統程式

cover

相信大家都有管理 Linux 主機 Process 的經驗,用的工具也是千奇百種,但是肯定對 Python 版本的 Supervisor 並不陌生,這套工具相當好用,可以監控不同的 Process 狀態,也可以自動重啟。而本篇要介紹用 Go 語言寫出來的開源套件『Supervisord』,作者提到為什麼要用 Go 語言開發此工具,原因很簡單,就是透過 Go 語言的跨平台優勢,寫一套程式,可以直接跑在任何平台,管理者就不需要再為了 Python 環境而煩惱。

[Read More]

NSQ Consumers 處理 Graceful Shutdown 技巧

Imgur

NSQ 是一套即時分散式處理消息平台,目的在於提供大量的訊息傳遞,團隊可以依據不同的任務來設計分散式架構去消化大量的訊息。而我在最近開發了一套開源項目 golang-queue/queue,這套詳細的資訊會再開另一篇進行討論,簡單來說這個套件可以讓開發者使用在單機的 Producer 及 Consumer 架構,使用的就是 Go 語言的 Goroutine 及 Channel,又或者直接搭配 NSQ, NATsRedis Pub/Sub 第三方的系統取代內建的 Channel 機制。而本篇會講在整合 NSQ 要處理 Graceful Shutdown 所遇到的問題跟解決方式。

[Read More]

用 AWS EFS 或 FSx Lustre 加速 Sagemaker AI 模型訓練

cover

前不久寫過一篇『AI 團隊整合導入 AWS SageMaker 流程』介紹如何用 Go 語言整合 SageMaker API。本篇會介紹在訓練 AI 模型前,如何將 Dataset 準備好並整合 SageMaker,過程中遇到什麼問題跟挑戰。團隊提供 AI 平台讓使用者可以上傳自家的 Dataset 搭配團隊內部預設的 Dataset 進行 AI 模型的訓練,最後將模型提供給使用者下載使用,簡單來說,使用者只需要提供 Dataset 並把 AI 訓練參數設定完畢,就可以拿到最後的模型進行後續的整合開發。底下我們探討使用者上傳 Dataset 的流程。

[Read More]

開源專案 Drone CI/CD 平台真的免費嗎?

cover

自己推行 Drone CI/CD 開源平台已經多年,很多人都會問我說,Drone 真的可以免費使用嗎?用在開源上面,或者是導入進公司內部團隊,這費用該怎麼計算呢?好的,本篇就帶大家了解 Drone 用在開源上或是公司內部團隊上需要注意的地方,官方其實有寫了一整頁 FAQ 非常詳細,底下是我整理幾點給大家知道。

[Read More]
drone  golang  git  gitea 

AI 團隊整合導入 AWS SageMaker 流程

Flow

團隊困境

如果團隊未來想把機器學習推廣成一個服務,可以讓開發者帶入不同的參數進行客製化的學習,最終拿到學習過的 Model。或是團隊資源不夠,想要使用大量的 GPU 資源來加速 AI Model Training,這時就是要朝向使用第三方資源像是 AWS SageMaker 來進行整合。而在團隊內會分成機器學習團隊,及後端團隊,前者是專門進行資料分析及 AI Model 演算法及程式碼開發,後者則是專攻全部工作流程,從產生測試資料,前置準備,到 Training Model,及將產生的結果發送給開法者,這整段流程會由後端團隊進行串接。所以當我們要用第三方服務時 AWS SageMaker,對於機器學習團隊來說,要將整個環境打包成容器模式,並且符合 SageMaker 所規定的格式,過程相當複雜,而為了讓開發環境統一,我們使用了容器技術 (Docker Container) 來進行 SageMaker 串接,本篇會教大家如何整合 SageMaker 流程,讓機器學習團隊可以專注於 Model 流程開發,而不需要花時間在整合容器技術並符合 SageMaker 格式。

[Read More]

用 docker-compose 優雅關閉服務

logo

大家應該遇過如果服務還有工作還沒處理完,服務要進行更新,需要等到全部工作處理完成才可以將服務的停止,而當服務收到關閉通知信號時,第一要先停止接受 Job 任務,接著等待 Worker 將手上 Job 處理完畢後,才停止服務,接著更新再上線。而這狀況怎麼透過 docker-compose 來處理停止服務,這就是本篇的重點。文章內會用 Go 語言當教學範例,如何接受 Docker 傳來的 Signal 訊號,接受訊號後該如何處理,及如何設定 docker-compose 的 YAML 檔案確保所有的工作都可以正常執行完畢。

之前已經有寫過幾篇關於 Graceful Shutdown 教學文章,大家有興趣可以先閱讀底下教學連結資訊,而本篇最主要是紀錄在如何用 docker 指令優雅關閉容器服務,尤其是關閉服務前,可以讓原本服務內的工作可以正常做完,才正式關閉。在本文開始前,先將 dockerdocker-compose 版本資訊貼出來,避免有資訊的落差,畢竟 docker-compose 在不同版本之間有不同的設定方式。

[Read More]

Go 語言內 new 跟 make 使用時機

logo

大家接觸 Go 語言肯定對 newmake 不陌生,但是什麼時候要使用 new 什麼時候用 make,也許是很多剛入門的開發者比較不懂,本篇就簡單筆記 newmake 的差異及使用時機。

[Read More]
golang 

如何取得上傳進度條 progress bar 相關數據及實作 Graceful Shutdown

由於專案需求,需要開發一套 CLI 工具,讓 User 可以透過 CLI 上傳大檔案來進行 Model Training,請參考上面的流程圖。首先第一步驟會先跟 API Server 驗證使用者,驗證完畢就開始上傳資料到 AWS S3 或其他 Storage 空間,除了上傳過程需要在 CLI 顯示目前進度,另外也需要將目前上傳的進度 (速度, 進度及剩餘時間) 都上傳到 API Server,最後在 Web UI 介面透過 GraphQL Subscription 讓使用者可以即時看到上傳進度數據。

而 CLI 上傳進度部分,我們選用了一套開源套件 cheggaaa/pb,相信有在寫 Go 語言都並不會陌生。而此套件雖然可以幫助在 Terminal 顯示進度條,但是有些接口是沒有提供的,像是即時速度,上傳進度及剩餘時間。本篇教大家如何實作這些數據,及分享過程會遇到相關問題。

[Read More]

使用 RESTful API 串接 Open Policy Agent

Open Policy Agent

上一篇『初探 Open Policy Agent 實作 RBAC (Role-based access control) 權限控管』介紹了如何透過 Go 語言直接嵌入 Open Policy Agent (簡稱 OPA)設定檔,並透過 Go 套件直接查詢使用者權限。由於目前 OPA 只有支援三種模式串接各種不同的 Application,一種是透過 Go 語言直接整合,詳細請看上一篇教學,另一種是透過 RESTful API,也就是本篇的教學,最後一種是透過 WebAssembly 讓其他 application 可以直接讀取。之後有機會再來寫 WebAssembly 教學。而本篇將帶您了解如何透過 RESTful API 方式來完成 RBAC 權限控管,其實我比較期待支援 gRPC 模式,但是看到這篇 issue 提到,OPA 現在已經支援 Plugin 模式,大家想擴充的,可以自行處理。

[Read More]