AI/ML LLM Deep Learning GPU

TensorRT-LLM 備戰學習路線

TensorRT-LLM 備戰學習路線

總時程: 12 週|每週約 15 小時(平日 1.5h × 5 + 週末 4h × 2)
GPU 費用: Week 1–4、10–12 用 Google Colab Free($0);Week 5–9 用 RunPod RTX 3090(約 $15)

第一階段:PyTorch + HuggingFace(Week 1–4)

Week 1:Tensor、Autograd、完整訓練迴圈

目標: 能從空白 Notebook 獨立寫出一個可訓練的神經網路

  • Day 1|Mon|1.5 hr — 環境建立 + Tensor 基礎
    • 開啟 Google Colab,切換 Runtime 為 T4 GPU
    • 建立各種 Tensor:zeros / ones / rand / tensor,印出 shape 與 dtype
    • 練習 Tensor 四則運算、矩陣乘法(@ 與 torch.matmul)
    • 確認 tensor.to('cuda') 後 device 顯示 cuda:0
    • 程式碼重點:x = torch.rand(3,4); y = torch.rand(4,5); z = x @ y
  • Day 2|Tue|1.5 hr — Autograd:梯度怎麼算
    • requires_grad=True 建 Tensor,做計算後呼叫 .backward()
    • 手動驗算:y = x²x=3 的梯度應為 6,程式驗證
    • 理解 torch.no_grad() 使用時機(推理時關閉計算圖)
    • 程式碼重點:x = torch.tensor(3.0, requires_grad=True); y = x**2; y.backward(); print(x.grad)
  • Day 3|Wed|1.5 hr — Dataset 與 DataLoader
    • torchvision.datasets.MNIST 下載資料
    • 建立 DataLoader(batch_size=64、shuffle=True),印出第一個 batch 的 shape
    • matplotlib 畫出 9 張訓練圖片,確認資料格式
    • 程式碼重點:X, y = next(iter(loader)); print(X.shape) # [64,1,28,28]
  • Day 4|Thu|1.5 hr — 建第一個神經網路
    • 繼承 nn.Module 寫 3 層 MLP(784 → 128 → 64 → 10)
    • 做一次 forward pass,確認 output shape 為 (64, 10)
    • 印出 model.parameters() 計算總參數量
    • 程式碼重點:nn.Sequential + nn.Linear + nn.ReLU + nn.Flatten
  • Day 5|Fri|1.5 hr — 訓練迴圈:Loss + Optimizer
    • 定義 CrossEntropyLossAdam optimizer(lr=1e-3)
    • 寫完整訓練迴圈:forward → loss → zero_grad → backward → step
    • 跑 1 個 epoch,每 100 batch 印 loss,確認數值在下降
    • 核心順序:zero_grad() 必須在 backward() 之前
  • Day 6|Sat|4 hr — 完整專案:MNIST 分類器
    • 重構程式碼:model / train_loop / eval_loop 各自獨立 function
    • 加上 eval loop,在 test set 計算 accuracy(目標 > 97%)
    • 用 matplotlib 畫 loss curve,確認無 overfitting
    • 儲存模型:torch.save(model.state_dict(), 'mnist_mlp.pt')
    • 推到 GitHub,README 記錄 test accuracy 數值
  • Day 7|Sun|4 hr — 複習 + 論文初探
    • 上午:不看筆記,從空白 Notebook 默寫完整訓練迴圈(默寫測試)
    • 上午:把 MLP 的 Linear 層換成 nn.Conv2d,看 accuracy 有無提升
    • 下午:讀 Llama 2 論文前兩頁(abstract + introduction)
    • 下午:建立「不懂詞彙清單」(RLHF、KV cache、GQA 等),Week 5 再深挖

Week 1 產出: GitHub repo,MNIST MLP,test acc > 97%

Week 2:HuggingFace Transformers

目標: 能用 HuggingFace pipeline 跑預訓練模型做 inference,感受大模型與自訓小模型的差距

  • Day 1|Mon|1.5 hr — HuggingFace 生態介紹
    • 閱讀 HuggingFace NLP Course Chapter 1(免費,線上)
    • 安裝 transformers 套件,了解 Hub 的 model card 怎麼看
    • 跑第一個 pipeline:pipeline('sentiment-analysis') 對幾句話分類
  • Day 2|Tue|1.5 hr — Tokenizer 深入
    • 理解 tokenizer 的三個輸出:input_ids / attention_mask / token_type_ids
    • 手動呼叫 tokenizer,印出每個 token 對應的文字
    • 比較不同模型的 tokenizer 分詞方式差異(BERT vs GPT2)
  • Day 3|Wed|1.5 hr — Model + forward pass
    • AutoModel 載入 BERT,做一次 forward pass
    • 理解 last_hidden_state 的 shape:(batch, seq_len, hidden_size)
    • 用 mean pooling 把 token embeddings 壓成句子向量
  • Day 4|Thu|1.5 hr — AutoModelForSequenceClassification
    • 載入預訓練的文字分類模型做 inference
    • 比較 zero-shot classification 與 fine-tuned 模型的輸出差異
    • 理解 logits → softmax → label 的轉換流程
  • Day 5|Fri|1.5 hr — 推理效能初探
    • 對同一模型分別用 CPU 和 GPU 跑 inference,比較時間
    • 理解 batch inference 與單筆 inference 的吞吐量差異
    • 初步認識 model.half()(FP16)對速度的影響
  • Day 6|Sat|4 hr — 專案:文字分類 pipeline
    • 選一個 HuggingFace 上的分類任務(情感分析或主題分類)
    • 寫完整 inference pipeline:讀 CSV → tokenize → 批次推理 → 輸出結果
    • 計算 throughput(samples/sec),記錄 baseline
    • 推到 GitHub
  • Day 7|Sun|4 hr — 複習 + 預習推理概念
    • 默寫:不看文件寫出完整的 HuggingFace inference pipeline
    • 閱讀:什麼是 autoregressive generation(next token prediction)
    • 筆記:Week 1 不懂的詞現在懂多少了?更新詞彙清單

Week 2 產出: 文字分類 inference pipeline,記錄 CPU vs GPU 推理速度

Week 3:Fine-tuning 入門

目標: 能對預訓練模型做 full fine-tuning 和 LoRA,理解參數更新的差異

  • Day 1|Mon|1.5 hr — Fine-tuning 基本概念
    • 理解 pre-training vs fine-tuning vs inference 三個階段的差異
    • 閱讀 HuggingFace NLP Course Chapter 3(Fine-tuning)
    • 準備 dataset:用 datasets 套件載入 IMDB 電影評論資料集
  • Day 2|Tue|1.5 hr — Trainer API
    • TrainingArguments 設定超參數(epochs、batch size、lr)
    • Trainer 對 BERT 做 fine-tuning(跑 1–2 epoch 即可)
    • 理解 evaluation_strategylogging_steps 的設定
  • Day 3|Wed|1.5 hr — 手寫訓練迴圈(不用 Trainer)
    • 不使用 Trainer API,自己用 Week 1 學的 PyTorch loop fine-tune
    • 比較兩種方式的程式碼量與彈性
    • 理解什麼情況下需要自己寫 loop(客製化 loss、gradient accumulation)
  • Day 4|Thu|1.5 hr — LoRA 概念
    • 閱讀 LoRA 論文 abstract 和 figure 1(理解低秩分解的直覺)
    • 安裝 peft 套件,用 LoraConfig 設定 rank 和 target_modules
    • 比較 full fine-tuning 與 LoRA 的可訓練參數量差異
  • Day 5|Fri|1.5 hr — LoRA 實作
    • 對同一個模型分別做 full fine-tuning 和 LoRA fine-tuning
    • 比較:訓練時間、GPU memory 用量、最終 accuracy
    • 理解 adapter 的儲存方式(只存 delta weights)
  • Day 6|Sat|4 hr — 專案:LoRA fine-tuning pipeline
    • 完整實作:載入模型 → LoRA 設定 → 訓練 → 評估 → 儲存 adapter
    • 記錄:base model accuracy vs fine-tuned accuracy
    • 寫一段 README 解釋為什麼用 LoRA 而不是 full fine-tuning
    • 推到 GitHub
  • Day 7|Sun|4 hr — 複習 + 閱讀
    • 默寫:LoRA fine-tuning 的完整流程
    • 閱讀:Mistral 7B 論文的 architecture 部分(sliding window attention、GQA)
    • 更新詞彙清單,標記已理解的詞

Week 3 產出: LoRA fine-tuning pipeline,有 full vs LoRA 的比較數據

Week 4:整合 + GitHub 作品集完善

目標: 把前三週整合成一個完整的 GitHub repo,準備銜接 Week 5 的推理框架

  • Day 1|Mon|1.5 hr — 整理 repo 結構
    • 建立統一的 repo 結構:/data/models/notebooks/src
    • 每個 notebook 加上清楚的說明和執行結果截圖
    • 確認每個 notebook 可以在 Colab 一鍵執行
  • Day 2|Tue|1.5 hr — 推理效能 benchmark
    • 對 Week 2 的 inference pipeline 做系統性 benchmark
    • 測試變數:batch size(1 / 8 / 32 / 64)、精度(FP32 / FP16)
    • 用表格整理結果:throughput(samples/sec)vs latency(ms/sample)
  • Day 3|Wed|1.5 hr — README 撰寫
    • 每個專案寫完整的 README:目的、方法、結果、怎麼執行
    • 加入 benchmark 表格和 loss curve 圖片
    • 寫「What I learned」段落(面試時有用)
  • Day 4|Thu|1.5 hr — 推理概念預習
    • 閱讀:什麼是 KV cache,為什麼 autoregressive generation 需要它
    • 閱讀:什麼是 continuous batching,vLLM 怎麼用它提升吞吐量
    • 記錄理解程度,為 Week 5 做準備
  • Day 5|Fri|1.5 hr — 複習自我評估
    • 自我測試:能否解釋 autograd、DataLoader、forward pass、LoRA 給非技術背景的人聽
    • 更新履歷草稿:加入 PyTorch、HuggingFace、LoRA fine-tuning
  • Day 6|Sat|4 hr — 技術 blog 第一篇
    • 主題:「從 PyTorch 基礎到 LoRA Fine-tuning:四週學習紀錄」
    • 內容:每週學了什麼、踩到的坑、benchmark 數據
    • 發布到 Medium 或個人 blog,連結放到 GitHub repo
  • Day 7|Sun|4 hr — 備戰 Week 5
    • 在 Colab 安裝 vLLM(熟悉環境)
    • 閱讀 vLLM 官方文件的 Quickstart
    • 申請 RunPod 帳號,熟悉介面和計費方式

Week 4 產出: 完整 GitHub repo + 第一篇技術 blog

第二階段大綱:LLM 推理框架(Week 5–9)

Week 5:推理原理

  • KV cache 機制與實作原理
  • Batching 策略:static batching vs continuous batching
  • Quantization 方法:GPTQ、AWQ、INT8 的差異與適用場景
  • PagedAttention 的直覺理解(vLLM 核心技術)
  • 閱讀:Efficient Large Language Model Inference 相關論文

Week 6–7:vLLM 實戰部署

  • 在 RunPod RTX 3090 安裝 vLLM 環境
  • 部署 Llama-3.1-8B,跑通第一個 inference request
  • 系統性 benchmark:tokens/sec、latency、GPU 使用率
  • 測試不同 quantization 設定對速度與品質的影響
  • 理解 vLLM 的 OpenAI-compatible API server

Week 8:llama.cpp 實戰

  • 安裝 llama.cpp,下載 GGUF 格式模型
  • 比較 llama.cpp vs vLLM:適用場景、延遲、CPU 可用性
  • 理解 GGUF 格式與量化等級(Q4_K_M、Q8_0 等)

Week 9:整合專案 + 技術 blog

  • 把交通違規系統接上 LLM 做 violation classification
  • 完整 benchmark 報告:vLLM vs llama.cpp 在不同 batch size 的表現
  • 技術 blog 第二篇:「用 vLLM 部署 LLM 推理服務:benchmark 與心得」

第二階段產出: LLM 推理服務專案 + benchmark 數據 + 第二篇 blog

第三階段大綱:CUDA 入門(Week 10–12)

Week 10–11:CUDA 核心概念

  • GPU 架構:SM、warp、thread / block / grid 的層級關係
  • Memory hierarchy:global / shared / register / local memory
  • numba.cuda 寫第一個向量加法 kernel
  • 理解 coalesced memory access 與 bank conflict
  • GEMM(矩陣乘法)的 tiling 優化直覺

Week 12:寫一個可展示的 kernel

  • 用 CUDA C 或 numba.cuda 實作 tiled matrix multiplication
  • 比較 naive 實作與 tiled 版本的速度差異
  • 能解釋 kernel 的平行化邏輯給面試官聽
  • 推到 GitHub,這是履歷上「具備 CUDA 基礎」的證明

第三階段產出: CUDA kernel 實作 + 效能比較

三個月後的履歷新增項目

Skills 新增:

  • PyTorch, HuggingFace Transformers, LoRA fine-tuning, vLLM, llama.cpp, CUDA 基礎, LLM inference optimization

Projects 新增:

  • MNIST MLP Classifier — PyTorch from scratch,test acc 97%+
  • LLM Inference Benchmark — vLLM vs llama.cpp,含 throughput/latency 數據
  • Traffic Violation AI — 交通違規系統整合 LLM violation classification
  • LoRA Fine-tuning Pipeline — full fine-tuning vs LoRA 比較

Blog 文章:

  • 從 PyTorch 基礎到 LoRA Fine-tuning:四週學習紀錄
  • 用 vLLM 部署 LLM 推理服務:benchmark 與心得

Comments

Loading comments…

Leave a Comment