發表文章

Python yield:生成器的威力與實戰應用

圖片
  1. yield 就是「可中斷的 return」 直覺上, yield 看起來很像 return :遇到它就「回傳」一個值;不同的是,函式不會結束,而是暫停在此,保留當前所有區域變數與執行位置,等到下一次呼叫才會從暫停處繼續執行。 簡單來說: def foo (): print ( "開始執行" ) while True : yield 4 # 暫停並回傳 4 print ( "★ 繼續執行 ★" ) 第一次執行 g = foo() 不會執行函式內容 ,而只回傳一個生成器物件。 呼叫 next(g) ,才會印出 "開始執行" ,並暫停在 yield 4 回傳 4 。 再呼叫一次 next(g) ,將從 yield 之後的位置繼續執行,印出 ★ 繼續執行 ★ ,然後再次遇到 yield 4 暫停並回傳。  2. next() 如何推動生成器 生成器物件除了可以被 next() 觸發,也可搭配迴圈自動驅動: g = foo() print ( next (g)) # → 4 print ( next (g)) # → ★ 繼續執行 ★ 4 for v in foo(): print (v) # 不停印出 4,直到你手動 break next(g) 等同於「進到下一個 yield 」,每次都從函式暫停處繼續執行。 用 for 迴圈時,Python 會自動呼叫 next() 直到生成器遇到 return 或拋出 StopIteration 。  3. 用 send() 向生成器傳入資料 除了單純取得值,生成器還能接收外部傳入的資料──使用 send() : def foo2 (): print ( "啟動" ) while True : received = yield "請傳入值" print ( "收到的值:" , received) g2 = foo2() print ( next (g2)) # 啟動,回傳 ...

ChatGPT 4 系列的比較

 GPT-4 系列大致可分為三條支線: 4 o 系 (4 o → 4 o-mini → 4 o-mini-high):同樣承襲 128 k 長上下文,但靠「縮小參數+提速」壓低成本;mini-high 進一步把上下文推到 ≈200 k,卻被部分開發者批評推理與程式碼品質下降。 4 .5 :2025 年初短暫提供的過渡版,強調創意寫作與程式碼完整性,仍維持 128 k 上下文,在 ChatGPT 端多被限制在 32 k。 4 .1 系 (4 .1 → 4 .1-mini):2025 / 4 發表,官方 API 支援 1 M 超長上下文,是目前公開最長;mini 版用較小參數換取速度、費用與免費額度,並已取代 4 o-mini 成為 ChatGPT 免費預設模型。 綜合比較表 模型 發表時間 官方 上下文窗 (Input + Output) 單次輸出上限 支援模態 速度∕費用 (相對 GPT-4o) 主要優勢 常見劣勢‍/限制 GPT-4 o 2024-05-13 128 000 Tokens ≈4 000 Tok 文字、圖像、語音 - 多模態、推理佳、最完整工具鏈 ChatGPT 端僅 32 k;API 輸出預設 4 k GPT-4 o-mini 2024-11 128 000 16 384 Tok 文字+圖像;音訊即將支援 ≈3 × 快、費用約 1 ∕ 5 成本最低仍保留 4 o 推理水準 論述深度與程式碼一致性略降 GPT-4 o-mini-high 2025-04-16 ≈200 000† 社群回報 32 k–100 k 同 mini 速度略慢於 mini,仍遠快於 4 o 更長上下文、輸出字數倍增 程式碼品質與「偷懶」現象被批評 GPT-4 .5 Preview 2025-02 128 000 32 768 文字、圖像 與 4 o 相近 更像人類的寫作風格、程式碼完整性佳 僅預覽;7-2025 起陸續下架 GPT-4 .1 2025-04-14 1 000 000 32 k(ChatGPT),API 未公布硬上限 文字、圖像,強化文件/程式長上下文 與 4 o 類似;官方宣稱成本-26 % 超長上下文、長文搜尋定位精度佳 長上下文僅 API 全開;ChatGPT 仍 32 k GPT-4 .1-mini 2025-05 ...

Keepalived + NGINX 高可用負載平衡架構實作手冊

  一:方案概述 目標:建構一個具備 自動故障切換能力 的 L4/L7 負載平衡系統 工具: NGINX Open Source :提供 HTTP/TCP 負載平衡能力 Keepalived :利用 VRRP 協定達成主備節點的自動切換 適用情境: 中小型內網服務 私有雲、API Gateway 前端 無需購買 F5 等昂貴設備但又需穩定性的場域 二:系統架構圖 包含: 用戶端 → VIP 主節點(Primary NGINX + Keepalived) 備節點(Backup NGINX + Keepalived) 後端伺服器群 VIP(虛擬 IP)會在主機與備機之間切換,提供單一進入點 三:Keepalived 自動切換的原理說明 基於 VRRP 協定 主節點定時透過 LAN 廣播「我還在」的訊號(advertisement) 備節點監聽這些訊號 當主節點: 拔掉網路線 NGINX 異常並被 track_script 偵測 關機、系統異常 停止 keepalived → 備節點會在 3 秒內自動判斷主節點已失效,搶下 VIP 備節點會發送 gratuitous ARP 更新網段,客戶端會自動連到新的 VIP 位置 四:完整安裝與設定流程 ✅ 1. 安裝元件(兩台都要) sudo apt update sudo apt install -y nginx keepalived ✅ 2. NGINX 設定範例(兩台相同) upstream backend { server 192.168.0.21; server 192.168.0.22; } server { listen 80; location / { proxy_pass <http://backend>; } } ✅ 3. Keepalived 設定(主 + 備) 主機: /etc/keepalived/keepalived.conf vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id ...

NVIDIA GPU 上部署大語言模型方案完整比較與實務建議

 方案: llama.cpp vLLM Hugging Face + ONNX Runtime Ollama 部署實務角度分析: 📦 安裝部署難易度 ⚙️ 效能與資源需求 💡 支援的模型格式與演算法差異 🚀 適合用途與場景推薦 🧠 一、總體部署方案比較表(NVIDIA GPU 環境) 方案 模型格式 GPU 加速 支援模型大小 併發效能 優點 缺點 適用情境 llama.cpp GGUF ✅(CUDA) 小~中(7B~13B) 中 輕量、支援量化 不支援 Transformer engine、慢 輕量部署、本機聊天 vLLM HuggingFace Transformers(.bin) ✅(CUDA) 中~大(13B~70B) 高 高效併發、推理快 部署略複雜、需較大 VRAM 商業部署、API 服務 ONNX Runtime + HF ONNX ✅(CUDA EP) 小~中(3B~13B) 中 通用模型格式 模型轉換複雜、不支援部分 LLM 功能 統一推理平台 Ollama GGUF(封裝) ✅(CUDA) 小~中(7B~13B) 中 安裝簡單、內建 Web API 不支援模型訓練、較少參數控制 快速部署聊天模型 📘 二、詳細說明與差異比較 1️⃣ llama.cpp ✅ 支援 GPU :可編譯支援 CUDA( LLAMA_CUBLAS=ON ),適用 RTX 5880 ✅ 模型格式 :使用 GGUF 格式(經過量化、低記憶體需求) 🔧 演算法差異 :使用自訂的 LLaMA 解碼器,針對 CPU/GPU 做精簡優化 🔁 適合用途 :單人使用、本地聊天、Docker 小型 API ❌ 缺點 :推理效率中等,不支援張量並行、多卡運行 GGUF 是量化後的權重格式,支援 INT4、INT8 等類型,大幅降低模型大小。 2️⃣ vLLM ✅ 支援 GPU :CUDA + TensorRT 最佳效能,可用 RTX 5880 的 full tensor core ✅ 模型格式 :原生 HuggingFace .bin + tokenizer.json 格式 💡 技術特點 : 使用 PagedAttention ...

使用 environment.yml檔建立專案的 Conda 環境

  使用 environment.yml檔建立專案的 Conda 環境  📌 environment.yml 的目的總結: 是為了 重現一個完全一致的軟體環境 ,可在其他電腦上建立同樣的開發/執行環境,涵蓋: Conda 安裝的套件(含 C/C++、Python 模組) pip 安裝的 Python 套件 指定 Python 版本 指定套件來源 (可選)指定環境路徑(prefix) environment.yml 是 Conda 的 環境建構腳本 ,比單純的 pip install 多很多功能: 功能 pip install environment.yml 建立虛擬環境 ❌(需配合 venv) ✅ 自動建立並命名環境 安裝 Conda 套件(如 C++ 依賴) ❌ 無法使用 ✅ 有原生支援與優化版本(e.g. numpy , libx264 ) 套件來源可控(channels) ❌ 只看 PyPI ✅ 支援 conda-forge、defaults 等 同時支援 pip 安裝 ✅ ✅(用 - pip: 子區塊) 記錄所有套件版本(可重現性) 依賴 requirements.txt ✅ 可明確列出版本與平台需求   建置流程如下: 建立乾淨環境: conda create -n mlx-backend python=3.12 conda activate mlx-backend 安裝你需要的套件(逐一裝): conda install aiohttp uvicorn pip install chromadb torch 測試沒問題後,導出 environment.yml : conda env export --from-history > environment.yml ✅ 之後可在別的機器上復原這個環境: conda env create -f environment.yml 💡 Bonus:如何只導出 pip 套件(像 requirements.txt ) 如果你想只輸出 pip 安裝過的套件(像 requirements.txt ) pip freeze > requirements.txt