2025年11月1日

微調Gemma3:270M用於FSM(有限狀態機) - 以貓砂機馬達控制Lab為例

 前言:

幾年前曾將家裡的貓砂機用樹莓派改裝,按照原本的控制邏輯用Python實做,並用於貓砂機控制。
在survey Gemma3:270M這種微型LLM時提到,Gemma3:270M具有很強的指令跟隨能力,貓砂機的馬達控制流程本質上就是FSM(有限狀態機)系統,而FSM的狀態處理本質上就是查表法,那麼,將Gemma3:270M的指令以「目前狀態」和「觸發IO」代入,生成「下個狀態」,不就能把Gemma3:270M應用在FSM(有限狀態機)系統,好像不錯,練習微調LLM,容易入門。

實做:

讓claude-code分析之前那個貓砂機程式,讓它把馬達控制的流程看懂,然後生成一個(FSM)有限狀態機的狀態表,接著讓它分析Gemma3:270 Finetune程式,程式內它的DataSet(資料集)用的是ChatML的格式,讓claude-code把馬達控制的狀態表轉成ChatML格式。

修改Gemma3:270 Finetune,將資料改用ChatML格式的DataSet,然後用colab執行,因為貓砂機的FSM狀態表不多,claude-code生出整個DataSet只有70條,整個微調訓練時間大概10分鐘即可完成。

成果:

用Ollama載入後,用固定格式問它,得出固定格式結果,如圖:


輸入「current_state: IDLE」「trigger_event: CMD_START_CLEAN」,
固定得出「next_state: STATE1_FORWARD」IO「in1_in1: 0, in2_in1: 1」。

整個Lab順利又快速,證明微調微型模型,可用於FSM(有限狀態機)的系統控制,測試時,幾次輸入,看起來結果一致性非常非常高(沒遇過結果錯誤的)。

程式碼:

https://gitlab.com/ycfunet/gemma3-270m_finetune-fsmsys

2025年1月1日

2025-01-01新年文~這幾年的前端之旅

這幾年斷斷續續學習網站前後端,一開始選型時,考慮到Java的基礎,因此看了GWT,後來發現目前的網頁生態已經全面以W3C以及Mozilla/Google/Microsoft/Apple為主的廠商和瀏覽器壟斷,基本上就是JavaScript方案主導了。

接著以不用前端框架 手把手打造基礎SPA為基礎,用TypeScript自己刻了一個SPA框架,並使用。

但改著改著,用著用著始終不順手,總覺得JS和TS語法寫著很彆扭,IDE的語法提示和程式碼樣式無法和自己的SPA框架適配。

近年Webassembly出現,想著是否能以WASM為基礎將SPA框架改成WASM,以便於開發,但發現支援WASM的程式語言支援度都不太好,尤其是和JS融合與DOM介接這兩塊。

於是看了c#的Blazor Webassembly,發現各方面整合都相當不錯,直接是Webassembly,整合JS和DOM都相當完整、穩定,提供純前端(Blazor Webassembly)和前後端(Blazor Server)方案,還能和.NET MAUI整合,直接做到了像是Capacitor這樣的Mobile的Web App開發方案和Electron這樣的電腦桌面的Web應用程式方案。

新年目標,將Blazor Webassembly學起來之後,實做一個Site Project。