Python
LeetCode: 108. Convert Sorted Array to Binary Search Tree 解題紀錄
題目
Given an integer array nums
where the elements are sorted in ascending order, convert it to a height-balanced binary search tree.
Self-Speculative Decoding 完整實作: LayerSkip Model, Bayesian Optimization, and Adaptive Draft-Exiting Mechanism(附 gemma-2-9b-it 實驗結果)
在過去的一週裡,我抽空按照論文 Draft & Verify: Lossless Large Language Model Acceleration via Self-Speculative Decoding 的思路嘗試復現了一遍自推測性解碼(Self-Speculative Decoding),包含以下模組:
- 跳層解碼的 Decoder-only Transformer 模型(主要以 Llama 和 Gemma-2 兩種架構為主)
- 自適應草稿離開機制
- 貝氏優化探索最佳跳層策略(尋找怎樣的搭配才會是最好的草稿模型)
- Self-Speculative Decoding —— 完成只靠模型自身的加速
[Python] FastAPI 使用 Server-Sent Events (SSE) 進行串流回覆
最近建立了許多 Chatbot 的後台 API Server,一開始我是接收到使用者的訊息後回傳,將 LLM 的生成回覆一口氣顯示在前端界面,但這樣使用者體驗並不好;之後改成了 HTTP 串流,每生成一個 Token 就回傳前端界面,但後來發現在部份使用者的裝置上會發生黏包,所以最後改成了使用 WebSocket。
Read More »[Python] FastAPI 使用 Server-Sent Events (SSE) 進行串流回覆[Python] 使用 Locust 開源壓力測試框架進行壓力測試
Locust 是一個開源的壓力測試工具,它能幫助我們模擬大量使用者對 Web 應用、API 服務進行負載測試;與傳統的壓力測試工具相比,Locust 具有可客製化、可擴展的優勢 —— 簡單來說,它支持 Python 作為腳本語言,根據我們 API 或網頁服務的不同應用場景來寫測試。
Read More »[Python] 使用 Locust 開源壓力測試框架進行壓力測試[Machine Learning] 向量量化(Vector Quantization, VQ)筆記
我第一次聽到向量量化(Vector Quantization, VQ)是在做音訊處理的朋友的口中,因此模糊地得知了向量量化是一種用於資料特徵壓縮和特徵表示的技術;當然那時,我還不清楚這與像是 PCA 等等降維技巧有什麼不同。
Read More »[Machine Learning] 向量量化(Vector Quantization, VQ)筆記[Python] @contextmanager 裝飾器的使用方式
Python 中的上下文管理器裝飾器 @contextmanager
是 contextlib
模組中的一個裝飾器,可以讓開發人員簡便地創造屬於我們的上下文管理器(Context Manager)。
vLLM 加速推理框架中使用整合之 Outlines 工具進行解碼約束

最近把不少 Outlines 的應用整合進了我當前工作流程中,其中我最常與 vLLM 一起使用的,不過其說明文件不知為何在 vLLM GitHub 上一直沒被 merge,所以我在設計流程時不得不一直拿一個被 rejected 的 PR 原始碼在看說明 XD
Read More »vLLM 加速推理框架中使用整合之 Outlines 工具進行解碼約束使用有限狀態機約束大型語言模型解碼之實作
本篇為一簡單 Python 實作,用於測試有限狀態機(Finite-State Machine)約束大型語言模型(Large Language Model)解碼出特定格式的回答,也權當作是理解 Outlines 工具的理念。當然,我實作的部份跟 Outlines 工具相比,實在顯得太過簡易。
Read More »使用有限狀態機約束大型語言模型解碼之實作[Python] 使用 difflib 模組比較序列差異
difflib
是 Python 標準函式庫中的一個模組,用於比較序列之間的差異(通常為文字)。早些年我在做碩論時還自己實現,直到現在工作了才發現有這麼簡潔的函式庫,煞是哭笑不得。