發表文章

GenAI: 如何讓你的 GPT 更聰明 (2)

圖片
我們在上一篇文章中介紹了如何有系統地提供問題資訊, 讓 GPT 或是其他 LLM 模型可以更精確地回答, 考慮到 LLM 在各應用中的便利性, 以及其高昂的訓練成本, 透過提示 (prompting) 提升回答精確度的方法, 被廣泛的應用與討論, 其中, 最基本也最廣為人知的也就是 RAG (Retrieval-Augmented Generation). Retrieval-Augmented Generation 於 2020 年由 Facebook AI 提出,  是將生成式模型 (Generative Model) 與檢索模型 (Retrieval Model) 結合的架構. 其設計的核心任務包含了: 解決 LLM 記憶受限問題 (context window 大小限制) 提升回應準確性與可追溯性 (根據外部知識檢索來源回答) 減少 hallucination (幻覺生成) 現象 RAG 的工作流程, 包含了以下的步驟: Query Encoding: 將輸入的問題進行向量化 (embedding), 使用相容的 embedding model 處理 Retrieval: 透過向量相似度搜尋 (vector similarity search) 從外部知識庫檢索最相關的段落 Context Fusion: 將檢索結果與原始 query 進行 prompt engineering,形成完整輸入 Generation: 將結合 context 的 prompt 輸入 LLM, 生成基於外部知識與語言模型推理的答案 來自:  https://medium.com/data-science/retrieval-augmented-generation-rag-from-theory-to-langchain-implementation-4e9bd5f6a4f2 (2,3 併入 Augment 步驟) 和上一篇文章中介紹的 prompting 技術比較, RAG 技術最大的技術特點即是在設計時是針對一個普及的使用. 為了面對多樣不同的查詢, 用以提供範例的資料庫也將十分龐大, 因此, 如何根據當前的資料查詢, 找到相對應的範例就是一個重要的問題. 在 RAG 中使用兩個技術: embedding 將輸入的語意編碼, vecto...

GenAI: 如何讓你的 GPT 更聰明 (1)

圖片
這一系列的文章, 預計會寫個幾篇, 說實話, 這大概連技術文件都說不上, 就是紀錄一些現有熟知的技巧, 在專有名詞部分, 標題的 GPT 其實可借代成任何 LLM (Large Language Model), 這些模型, 以昂貴的訓練成本, 不開源的存取方式稱著, 當然, 他們會收集我們在網頁上的輸入以及反饋,  以免費存取作為代價, 以全人類的資料, 進一步優化這些生財工具, 但是, 對於個人而言, 我們如何客製化一個我們想要的 LLM? 首先, 我們先談談這是否必要? 針對多數的應用中, GPT 或是其他 LLM 其實都已對應大眾使用行為進行調整, 撇開幻覺生成 (Hallucination), 以及過於順從的問題, 在多數的時候, 不論你詢問星座或是 python coding, 他們都可以表現得不錯, 原因無他, 因為在網路上已有大量的相關資料供 LLM 學習. 然而, 若我們考慮一個小範圍且專業的領域呢? 或是, 當我們資訊的提供, 無法以文字或是圖片有效傳達該怎模辦呢? 我們不太可能重新訓練一個 LLM, 而是想借力於一個已經訓練好的 LLM 能力, 針對我們設想的任務優化, 通常來說, 我們有兩種方式可以達成, 分別是: 提示工程 (prompting) 以及模型優化 (fine-tuning). 我們先從最基本的提示工程開始吧! 為了要有一個準確的回答, 首先, 我們需要一個好的問題, 那麼, 一個好的問題需要提供那些資訊呢? 以下是 Gemini 提供的一些指引:  https://ai.google.dev/gemini-api/docs/prompting-strategies 1. 明確的指示(Clear instructions) 使用清楚、具體、直白的語句。 說明任務是什麼、要用什麼格式輸出。 若任務有多步驟,建議拆解並分別列出。 2. 上下文(Context) 提供必要背景資訊(如任務目標、角色、使用者需求)。 可加入範例、定義或限定條件讓模型更準確理解。 3. 角色扮演(Role prompting) 指定模型扮演的角色(例如:「你是資深數據分析師」)。 讓模型以特定觀點或風格作答,提高一致性與專業度。 4. Few-shot 示範(Few-shot prompting) 提供1~3個範例作為輸入與期望輸出格式。 ...

AI-RAN: Nvidia Areial RAN - Sionna (6)

圖片
原本想說結束 Sionna 的系列文章, 結果今天爬文時, 又發現了一個值得寫的內容: Sionna Research Kit (Sionna-RK) https://nvlabs.github.io/sionna/rk/index.html Sionna Research Kit 結合了 NVIDIA Jetson 平台以及 OpenAirInterface, 提供支援 O-RAN 介面, 以及軟硬體整合的 5G 開發架構. 提供一個軟體定義無線電的開放式開發架構, 讓開發者可以實現所發展的 AI/ML 演算法. Source:  https://nvlabs.github.io/sionna/rk/quickstart.html#hardware-requirements 和之前我們介紹過的 cuRAN 不同, Sionna Research Kit 雖然也基於 Nvidia 硬體 (Jetson, 未來會支援 Project Digit), 但並沒有實作 cuPHY 與 cuMAC 功能, 猜測是為了節省 GPU 算力需求, 相對的, 在系統架構上, 也須依賴 B210 開發板來進行 (OpenAirInterface 開發板), 在 Jetson 上, 就只有原本 OAI gNB 原生的功能實作. 這樣的架構, 事實上, 和既有 OAI 在 PC + B210 的系統實作類似, 也因此, Sionna-RK 的功能的特色, 應該在於 Sionna 提供了甚麼樣的功能接口, 使得第三方可以在此平台上快速開發與實現 AI/ML 演算法. Source:  https://nvlabs.github.io/sionna/rk/tutorials.html 在 Sionna-RK 中, 提供了 2 個不同的 AI/ML 應用, 分別是: GPU-Accelerated LDPC Decoding Neural QAM Demapper 用以展示使用 Sionna 將 AI/ML 引入 AI RAN 的能力, 不過, 在這邊需要注意與澄清的是: 目前的整合實作不包含 Sionna-RT, 換句話說, Sionna-RK 的通道, 並非使用 Sionna-RT 進行模擬, (Source: https://nvlabs.github.io/sionna...

AI-RAN: Nvidia Areial RAN - Sionna (5)

圖片
在完成了 Sionna RT 的範例後,  我們接著研讀如何藉由 Sionna RT 的模擬資料, 與 Sionna PHY 和 Sionna SYS 進行結合, 在 Sionna 的網頁中, 個有一個對應的範例程式: Sionna PHY:  https://nvlabs.github.io/sionna/phy/tutorials/Link_Level_Simulations_with_RT.html Sionna SYS:  https://nvlabs.github.io/sionna/sys/tutorials/SYS_Meets_RT.html 我們就從這兩個範例介紹, 並著重在和 Sionna RT 介接的部分. 就先從 Sionna PHY 的範例開始, 在 Link_Level_Simulations_with_RT 的範例中, 整體的執行步驟可以分成以下的程序: 建立 Ray-Tracing 場景 (Sionna RT) 將 Ray-Tracing 通道導入 Sionna Channel 模型 (Sionna PHY) 輸入為 CIR 資料, 包含: delay, gain 的數據 根據場景, 產生一整個 CIR 資料集合 設定 Sionna PHY 對應的設定 執行模擬並評估效能 其中, 最為關鍵的是在第二步驟,  也就是把 Sionna RT 產生的通道放入 Sionna PHY 模擬, 在這一步驟中, Sionna RT 取出的資料值為 CIR 的形式 (tab 轉換後), 並把產生的資料存入一個資料集, 作為之後 Sionna PHY 訓練之用. 在 Sionna PHY 與 Sionna RT 的整合中,  使用 Sionna RT 的資料包含了時間延遲, 以及通道增益, 不包含通道的相位資訊, 至於在 Sionna SYS 中使用的 Sionna RT 資訊更少, 是透過 CFR 資訊轉換出來 SINR 數值, 其功能方塊圖如下:  其中, 上圖所標示的功能介紹如下:   Sionna RT 的模擬, 用以產生 CIR 資訊, 並轉換成 CFR 計算對應 SINR 數值 PHYAbstraction: 用來虛擬化實體層 (Physical Layer) 的計...

AI-RAN: Nvidia Areial RAN - Sionna (4)

圖片
我們就從 Sionna RT (Ray Tracing) 開始吧, Sionna 的安裝過程已經包成 pip 套件, 通常是不會遇到甚麼問題. 如果擔心和現有 python 環境衝突, 可以用 miniconda 之類的套件處理. 安裝好 Sionna 之後, 我們就按照其範例進行實作: https://nvlabs.github.io/sionna/rt/tutorials/Introduction.html 在開始介紹 Sionna RT 之前, 我想先列一下 3 項和 AODT 的差異: Sionna RT 對場景定義使用 XML 格式, AODT 使用 USD 格式 Sionna RT 不包含 cuMAC 和 cuPHY  Sionna 不包含即時的互動介面 (AODT 藉由 Omniverse 平台實作) 在 Sionna RT 的介紹範例中, 介紹了如何載入場景, 設置基地台與使用者, 並進行通道模擬, 取出模擬通道中的通道響應, 並搭配可視化界面呈現. 由於 Nvidia 技術文件其實寫得很好, 整體執行範例也不成問題, 所以, 我們在這邊就以整體執行流程的概念來說明, 我們列出整體流程如下: 載入場景(Scene)[block 1-12] 在範例中是以 Mitsuba XML 檔載入, Mitsuba 為 Ray-Tracing Model 的底層套件 可使用 Blender 搭配 OpenStreetMap 資料建立場景 場景的圖示化須設置攝影機位置, 並針對攝影機與場景的互動, 產生如下圖片 針對場景, 另一個重點是場景中物件的特性, 這邊可以看 SceneObject 的定義 透過 SceneObject 的設定, 可以設定場景中物體的電磁特性(如混凝土、玻璃等) 放置裝置(Transmitter & Receiver)[block 13] 定義發射器與接收器的位置與天線陣列 scene.rx_array = PlanarArray(num_rows=1,                              num_cols=1,       ...

AI-RAN: Nvidia Areial RAN - Sionna (3)

圖片
之前停頓了一段時間, 沒有繼續寫 Sionna 的文件, 看起來或許是一件好事, Sionna 在 Nvidia 的 GTC 2025 中, 公布了正式的 1.0 版本, 連結如下: https://nvlabs.github.io/sionna/index.html 相較於之前 0.19 的版本,  Sionna 1.0 版中, 明確地把 Sionna 分成三個部分: Sionna RT: A lightning-fast stand-alone ray tracer for radio propagation modeling Sionna PHY: A link-level simulator for wireless and optical communication systems Sionna SYS: System-level simulation functionalities based on physical-layer abstraction 其中, Sionna RT 也就是底層通道模擬的部分, 如之前所述, 這邊需要定義基站和使用者位置, 環境,  系統則會模擬出每一對基站到使用者訊號強度. 第二部分, Sionna PHY 則是利用模擬的通道來進行 PHY 層的計算, 對於 Sionna PHY 而言, 輸入可以是統計的通道 (AWGN, Rayleigh fading), 進行包含包括調變, 編碼, 通道, 接收與解碼的不同功能, 當我們要把 Sionna PHY 和 Sionna RT 進行整合時, 我們可以把 Sionna RT 的輸出存成 sionna.channel 的形式, 表示通道的時間響應 (Channel Impluse Response, CIR), 作為 Sionna PHY 的輸出, 下圖為 Sionna RT + Sionna PHY 結合的範例, 先透過模擬基站 (紅圈) 與使用者 (紅點) 的通道, 記錄下來, 之後放入 Sionna PHY 中進行後續模擬. 來自:  https://nvlabs.github.io/sionna/phy/tutorials/Link_Level_Simulations_with_RT.html 最後, 對於 Sionna SYS, 這一個布建基...

AI-RAN: DPU (Data Processing Unit) 與他的分類 (3)

圖片
回到原本的主題, 讓我們來介紹 DPU 的分類吧, 在 Nvidia 的文件中, DPU 一共有 4 種不同的運作模式, 分別是: DPU mode or embedded function (ECPF) ownership where the embedded Arm system controls the NIC resources and data path (default) Restricted mode which is an extension of the ECPF ownership with additional restrictions on the host side NIC mode where the DPU behaves exactly like an adapter card from the perspective of the external host Separated host mode (symmetric model) 在上一篇文章所介紹的模式, 被稱為 DPU mode, 考慮到所有的裝置也都被命名為 DPU, Nvidia 又稱為 embedded function (ECPF) 模式, 在此模式下, DPU 中的 ARM (CPU) 控制所有的資料流. 在 Restricted mode 則是延伸原有的 ECPF 模式, 但是更限制主機的存取, (無法從主機上對 DPU 進行對應的設定, 所有設定在 ARM 上執行) 主要應用的場域是在安全性較高的網路設定中. NIC mode 則是之前提及的 ConnectX 網卡模式, 最簡單容易設置, 但是, 就無法發揮 DPU 進行負載平衡的功能. 最後 Separated host mode, 這邊的資料比較少, 不過按照文件敘述, 主要是對應於資料中心的網路規劃, 主機和 DPU 分開並平行處理資料流. 這些不同模式, 可以用下列的 MST 指令來設定, 首先是看目前 DPU 狀態: $ mst status -v ... DEVICE_TYPE             MST              ...