HiIamJack

@HiIamJack

Joined on Mar 25, 2024

  • 量化的好處 一般的模型在使用上是以 fp32 的形式, 有較佳的精準度但同時也占據較大的儲存空間及運算效能, 量化的優點在於可使模型變小且從原本浮點數 fp32 轉為整數 int8 在運算效能上也更快 量化分成兩種方式QAT : 用於模型訓練中優點 : 量化相較於 PTQ 有較佳的精準度 缺點 : 訓練時間可能較長 PTQ : 用於模型訓練後 優點 : 量化時間較短, 且可用較小的數據集即可完成 缺點 : 效果會較 QAT 略差
     Like  Bookmark
  • 摘要 本文紀錄了 tensorRT 的使用並以 yolov9 當作範例來去實踐, 在 v10 已經有 NMS free 達成但NMS 這一經典的方法覺得還是該寫進此筆記作為紀錄, 有需要也可以回頭複習 後續也可基於此專案改寫不同的推論引擎 環境建制 硬體環境 : Dell G15 GPU : RTX3050 Laptop 4G CPU : 12th Gen Intel® Core™ i5-12500H, 16 cores Memory : 16GB
     Like  Bookmark
  • 摘要 本文敘述了 tflite-micro 需要部屬的硬體 Sparkfun edge以及其範例程式的編譯、燒錄及驗證畫面, 可參照部奏依序完成實作但 code 硬體不會在此篇文章詳述, 會在下一章Sparkfun_edge--Hello World 程式解析 使用的 source code 為 tensorflow 中的 v2.3.0-rc2, 硬體選用 Sparkfun edge 主要原因為 tensorflow 官網教程內提及的硬體並範例進行編譯 硬體介紹 MCU - Sparkfun edge 完成的程式會燒入此 mcu 中 image 轉版 - CH340G
     Like  Bookmark
  • Design pattern Cuda 學習 AI 部屬
     Like  Bookmark
  • 悲慘的讀取問題 在筆電上裝了 nvidia driver 後出現可以讀取到延伸螢幕但筆電本身螢幕開不了的問題, 為此紀錄一下處理步驟 首先使用 lspci | grep -i vga 查看有讀取到兩張顯卡, 一張RTX 3050 一張內顯 Screenshot from 2024-11-29 21-59-24 執行以下指令可看到 sudo vim xorg.conf, 裡面沒有處理 intel 顯卡的部份, 因此我們需要做添加 Screenshot from 2024-11-29 22-02-02 執行以下指令 sudo mkdir -p /etc/X11/xorg.conf.d sudo vim /etc/X11/xorg.conf.d/20-intel.conf
     Like  Bookmark
  • 定義 正定矩陣(Positive-Definite matrix) 一個矩陣 $A \in \mathbb{R}^{n \times n}$是正定(Positive-Definite)那需要滿足以下條件$A=A^{T}$ 為一個對稱矩陣 對任意的向量 $x\in\mathbb{R}^{n}$ 且$x$不為零向量, 能夠滿足$x^{T}A{x}>0$ 問題描述 一個線性系統如下, 其中$A\in\mathbb{R}^{n \times n}$ 是正定矩陣, 我們的目的是要求解以下線性系統獲得 $x$ $$Ax=b, x\in \mathbb{R}^{n} $$ 當矩陣 $A$ 越大時計算反矩陣是一項很耗計算量的工作所以會傾向使用迭代的方式進行, 而 Conjugate Gradient Method (CG method)則是一個方式通常使用於 Sparse matrix下求解線性系統, 但前提是 $A$ 要是正定矩陣. 相關的理論推倒可以參考林得勝教授的這篇文章Conjugate gradient method - iterative method, 裏頭給出了詳細的理論推導由來, 建議的先備知識為線性代數。
     Like  Bookmark
  • 介紹 本文的連結包含了目前自學 Cuda 所紀錄的筆記, 主要學習資料來源為清大周至遠教授的平行計算課程以及網路上大神的文章, 會將各筆記做成以下目錄再點進去閱讀即可 各筆記連結 1. Cuda 學習 - Hello World 2. Cuda 學習 - 基本定義 3. Cuda 學習 - 定義唯一 ID 4. Cuda 學習 - Warp 5. Cuda 學習 - Parallel Reduction 上 6. Cuda 學習 - Parallel Reduction 下
     Like  Bookmark
  • GPU 中的記憶體類別 在以下圖中敘述了 GPU 內各個記憶體之間的運作關係, 其中主要使用的記憶體有以下Register Shared Memory Global/Local Memory Constant Memory純讀可以被 cached, 用來保存不會被更改的數據使用 讀寫速度與 global 相當 Global variable 使用 image Register
     Like  Bookmark
  • Cuda 介紹 CUDA 是用於圖形處理單元(graphical processing units,GPU)的平行運算平台和程式設計模型。透過 CUDA,您可以利用 GPU 的運算能力加速應用程式。 利用 Cuda 寫 code 前需要先安裝對應的 cuda 套件及支援的 cudnn, 對應版本可在網路上找尋到相關教學 Cuda 撰寫是轉寫 .cu , 寫法與 C/C++ 相似, 編譯實需使用的 nvcc 作為編譯器 C vs Cuda 程式上使用的指令, 其實就差在前面多個cuda c cuda malloc
     Like  Bookmark
  • Cuda 的資料使用流程如下 從 CPU 做資料初始化 將資料從 CPU 搬運至 GPU Kernel 根據 Grid、Block 大小做資源分配 將執行完的資料從 GPU 搬運回 CPU 回收 CPU、GPU 的相關資源 名詞定義 程式上Host code : 在 CPU 上執行的程式 Device code : 在 GPU 上執行的程式
     Like  Bookmark
  • 先來看個一維的向量 這是一個 <<<block_per_grid, thread_per_block>>> 的一個例子, 送入cuda 打印出來可得到, 而block_per_grid 及 thread_per_block 分別為dim3 block_per_grid(1); dim3 thread_per_block(8); image __global__ void print_with_pure_threadIDx(int*src) { int tid = threadIdx.x; printf("blockIDx %d and threadIDx %d, data %d \n", blockIdx.x , threadIdx.x, src[tid]); }
     Like  Bookmark
  • 介紹 本文參照 Nvidia 的文件並搭配自身電腦做測試整理出此篇筆記 可以理解為所有數字相加求和的平行化, 例如 norm 或是單純 vector 內的所有元素和 為一個Tree base 的結構進行求和 image 為了能達到最佳效能通常處理的數據量級較大 GPU 總是保持在 busy 且盡可能不浪費運算資源 每一次 thread block 迭代會減少使用Array 中的數據資料 Cuda 在 block 的限制
     Like  Bookmark
  • 本文接續上一篇 Cuda 學習 - Parallel Reduction(上) 做後續的演練 在上一篇已完成了 Parallel reduction 的介紹及基本的程式演練但在 Sequential Addressing 上面雖然已完成加速但造成了一半以上的 threads 呈現 ideal 狀態, 這是非常浪費資源的事情 First Add During Load 由於後半的 thread 基本上都為使用到那和不一開始就先往前加到前半呢 可以看到直接將 i 的部份前半的 block offset 乘上兩倍並放到 shared memory 上 迴圈的 offset 也改由 blockDim.x 的一半開始, 每次新的迭代就除以 2, 並針對小於 offset 的 tid 進行加總 __global__ void reduce3(int *g_idata, int *g_odata) {
     Like  Bookmark
  • 策略模式(Strategy) 為一種行為模式 使用時機 : 如有大量if/else出現來決定不同使用方法時可以使用 目的 : 讓各方法較好維護且介面統一提昇程式可讀性 優點 :隨意切換 每個"策略"被裝進單獨的類別中開發較好理解與維護 缺點 : 客戶端必須清楚知道不同策略之間差異,才有辦法選擇到適合的演算法
     Like  Bookmark
  • 觀察者模式(Observer) 為一種行為模式 使用時機 :描述一對多的依賴關係,當主題狀態發生變化會更新給觀察者知道,並且能添加或是減少觀察者 * 目的 :Subject有某個特定資訊在更新後需要讓Observer知道並做對應的動作 優點 : Observer即Subject為抽象耦合關係,降低兩者的耦合關係。 建立了一套觸發機制。
     Like  Bookmark
  • 橋接模式(Bridge) 為一種結構模式 使用時機 :兩個(或以上)獨立類別的維度相互作用時,舉例你有積木(圓形跟方形)、顏色(紅色根藍色)這樣如果要交互組合會額外產生4個類別,如再擴充會呈倍數成長 提升各類別的靈活性及降低繼承使用 目的 : 抽象跟實作可以各自擴充,不會影響到對方 降低繼承的使用
     Like  Bookmark
  • 適配器模式(SingleTon) 為一種創建模式 使用時機 : 程式中某一類別實體化唯一的時候使用 目的 :讓使用的實體化類別唯一 可是用在實體化資料庫或是開銷很大的類別 優點 : 只有唯一一個實體化,減少了內存開銷及性能開銷 避免資源重複佔用
     Like  Bookmark
  • 工廠模式(Factory) 為一種創建模式 簡易工廠模式 優點 :簡易好上手, 常與if/else或是switch case一同使用 缺點 : 如case過多維護不易,如新增類別還會動到其他程式
     Like  Bookmark
  • 建立模式(Builder) 為一種創建模式 使用時機 :當class需要帶入的參數過多的時候 需要創件有特定配置的物件 目的 : 簡化創件的過程且可提昇代碼的維護性 優點 :
     Like  Bookmark
  • 前言 此技術文件及超連結記錄著Udemy上Dmitri Nesteruk的Design Patterns in Modern C++的一些學習筆記,並試著給出一些基本範例。 程式基本範例我通常盡量會想一些比較通俗的例子好理解,如果一時之間想不到會借助一下ChatGPT 介紹 針對程式語言中常出現的問題所提出的解決方法,名詞術語由Erich Gamma等人在1990年代從建築設計領域引入到電腦科學的。通常有以下三中類型 Creational Pattern 創建型模式用於描述如何建立物件 Structural Pattern 結構型模式
     Like  Bookmark