發表文章

LTE筆記: Time Difference of Arrival form Uplink SRS (1)

圖片
針對 LTE (4G)/5G 這樣的行動通訊系統而言, TDoA (Time Difference of Arrival) 大概算是最常見的定位量測資訊, 然而, TDoA 的資訊事實上來自於使用者的傳輸訊號, 需要搭配 SRS (Sounding Reference Signal) 的傳輸進行量測, 在過去, 由於此部分的公開資料有些少, 所以我們並沒有許多實作的細節, 最近, OAI (Open Air Interface) 實作了 TDoA 與 LMF (Location Mgmt. Function), 讓我們可以一窺 TDoA 的取得方式與實作機制. 我們在第一篇文章中, 先介紹以 SRS 實作 TDoA 的基本概念, 本文主要的內容來自於: arXiv:2409.05217 From Concept to Reality: 5G Positioning with Open-Source Implementation of UL-TDoA in OpenAirInterface 來自:  https://arxiv.org/html/2409.05217v3 在以上的流程圖中, 介紹了 OAI 實作中, 如何發起 SRS 的量測: LMF (Location Management Function) 是定位的核心控制單元 LMF 先透過 API 接收到定位請求(包含 UE 的 IMSI/SUPI、NCGI 等資訊) LMF 透過 NRPPa 協議 向 serving gNB 發送 Positioning Information Request, 要求 UE 傳送 Sounding Reference Signal (SRS) serving gNB 配置 SRS 資源, 並回報其 SRS 配置給 LMF LMF 再下達 Positioning Activation Request, 正式觸發 UE 傳送 SRS 其他鄰近的 gNB/TRP 透過相同的配置接收 UE 的 SRS, 並回傳量測結果給 LMF 接著, 透過取得的 SRS 量測數值,  gNB 的 PHY 層利用 UE 的上行 SRS 進行通道估計與 ToA (Time of Arrival) 計算: 使用 Zadoff-Chu 序列的 SRS 進行相關運算與 IFFT, 得到通...

[AIML] 深度學習模型的封裝: ONNX

圖片
 ONNX (Open Neural Network Exchange) 是一個開放格式, 用來表示深度學習模型與傳統機器學習模型的計算圖結構, 讓不同的深度學習框架 (如 PyTorch、TensorFlow、Scikit-learn) 之間可以互通, 使模型的部署與交換更加方便. 來自: https://github.com/1010code/onnx-mlir-tutorial 透過 ONNX, 我們可以完成以下的目標: 模型跨平台轉換與交換 可將模型從 PyTorch、TensorFlow、Scikit-learn 等框架導出為 ONNX 格式 便於在不同工具或設備之間共享與重用模型 跨硬體部署 (CPU、GPU、FPGA、NPU) ONNX 模型可以在多種硬體平台執行,不需重新訓練 搭配 ONNX Runtime、TensorRT、OpenVINO 等工具,實現高效推理 推理優化與加速 可結合 TensorRT、ONNX Runtime 等進行圖優化 (Graph Optimization) 與推理加速 適用於邊緣設備、嵌入式系統、高性能伺服器等場景 多模型整合與模組化設計 可將多個子模型整合為一個 ONNX 模型,便於部署與管理 適合構建複雜管線 (例如預處理 → 模型 A → 模型 B → 後處理) 在 ONNX 架構中, 事實上是把模型拆解成計算圖 (GraphProto), 在計算圖中, 包含了以下 4 種角色: node: 每個節點代表一個操作 (如: matmul、relu、add) input: 圖的輸入 (例如: 影像、感測器資料) output: 圖的輸出 (例如: 分類結果、控制訊號) initializer: 模型的參數 (例如: 權重、bias 等) 來自:  https://onnx.ai/onnx/intro/concepts.html 透過上述運算子, ONNX 可以把原有的運算, 轉化成 Directed Acyclic Graph (DAG), 再放到不同計算平台進行運算. 然而, 也是由於計算圖 (GraphProto) 的原因, ONNX 有以下限制: 1. 無法封裝任意 Python 程式邏輯 ONNX 只能表示靜態的計算圖 (computational graph), 不支援像 Python 中的...

LTE筆記: Time Advance in Positioning

圖片
在很久之前的文章中 ( 這裡 ),  我們介紹定位方法時, 提到了 Time Advance (TA) 的量測. 最近正好讀到相關內容, 就整理一下 TA 的原理以及潛在的定位應用. Timing Advance (TA)  是一種用於 5G 網路中, 讓用戶設備 (UE) 在正確時間發送上行訊號的機制. 其主要目的是為了補償訊號從 UE 傳送到基地台 (gNB) 之間的傳輸延遲, 以避免來自不同距離的 UE 訊號在基地台接收端未按照排程對齊, 產生干擾. 我們可以以下圖做為範例說明: 來自: https://www.telecomhall.net/t/parameter-timing-advance-ta/6390/5 左圖是在沒有使用 TA 下進行傳輸,  在此情形下, UE 收到 downlink 訊號就直接回 uplink 傳輸, 由於不同距離產生的訊號延遲, 導致不同 UE 間的 uplink 訊號不同步, 在右圖, 透過 TA 機制彌補傳輸訊號延遲後,  對基站而言, downlink 和 uplink 的傳輸時間即可對齊. TA 為基站所計算, 根據 UE 傳來的時間資訊估算距離與延遲, 透過 RAR (RACH Response) 或 MAC 層的 TA Command 下達 Timing Advance 值, UE 根據 TA 調整自己上行符號的發送時機, 基站便能在自己的時間基準上, 準確地接收所有 UE 的上行訊號. 考量到 TA 資訊隱含了距離的資訊, 透過量測 UE 的 TA 值, 可推算 UE 到基地台的粗略距離. 在下圖中, 即展示了不同使用者位置對應的服務基站與 TA 數值: 來自:  https://www.sharetechnote.com/html/Handbook_LTE_TimingAdvance.html 然而, TA 作為定位資訊也有以下的限制: 1) TA 只能由 Serving Cell 量測與控制: 由於 TA 是針對 uplink 傳輸同步的參數, 非 Serving Cell 並未接收 UE 的上行訊號, 無法估計或是取得 TA 資訊, 無法實行多個基站的偕同定位 2) 因 TA 值有一定的精度限制, 只能作為粗略定位參考: 此數值和...

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

圖片
在之前的文章中, 說明了如何透過 prompting 的方式訓練 LLM 模型, 事實上, 在這邊說 "訓練 (training)" 有點奇怪, 因為 LLM 模型的權重並沒有產生任何改變, prompting 比較像是提供範例學習 (few-shot learning),  讓 LLM 增進回答的精確度, 或者, 更貼近使用者想要的回答. 當然, 針對特定的應用領域, 例如: 法律, 通訊, 客服, 等 擁有大量語意資料, 同時, 擁有特殊的領域資訊,  我們可以透過微調 (fine-tuning) 方式, 來調整 LLM 模型的權重, 在此架構下, LLM 模型的權重將被改變, 而可以記憶放入學習的資料, 以下是兩種方法的比較表:   在過往, 對 LLM 模型的微調相對複雜, 通常我們會基於開源的基礎模型 (base model), 如: LLaMa 進行調整, 主因大概有兩個: 第一、微調需要大量資料, 以及對應的資料前處理, 第二, 微調需要不少算力, 有能力建立者皆可自行訓練 LLM 模型. 同時, 微調後的 LLM 模型, 也被視為重要產出, 對應目標的應用領域. 不過, 我們還是可以從現有的 LLM 模型 API 中一窺 fine-tuning 的方法, 我們一樣以 Gemini 為範例, Gemini 提供了 fine-tuning 的 API, 如下: https://cloud.google.com/vertex-ai/generative-ai/docs/models/gemini-use-supervised-tuning 其中, 第一個重點即是準備訓練資料與文本, 其範例如下: {    "input_text": "這是輸入文本。",   "output_text": "這是期望的輸出文本。" } 當然, 我們也可以結合之前 prompting 的資訊,  給予訓練資料更多的角色定義, 例如: {   "systemInstruction": {     "role": "system",     "parts": [ { "text": ...

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...