我讀 «輝達之道»

這個年假原本打算讀兩本書、 校稿兩篇專利 (?)、 準備一些美金看美股有沒有便宜可以撿、最後再看一下同事介紹的 DeepSeek 在幹啥?

不料就在年假的第一個周末, DeepSeek AI 突然直接攻佔各種新聞版面, 變得幾乎無人不知無人不曉. 週一晚上的美股 – 尤其是輝達價格大跳水! 這下我的好幾件事都連結在一起了. 因為我想讀的其中一本書就是 “輝達之道".

這本書原名 “The Nvidia Way", 作者是金泰 (Tae Kim), 譯者是洪世民和鍾玉玨. 本書非常值得推薦, 雖然翻譯有幾處比較不通順 – 不知道副詞子句是在講主詞還是受詞, 但整體可讀性沒問題. 每個人看這本書的觀點可能有些不同, 它可以是勵志的新創公司成功記、可以是黃仁勳發跡故事的側寫、或是一本 GPU 簡史. 對我來說, 它就是 Q&A. 解惑了我好幾個問題.

Q1. Nvidia 為何沒有變成一代拳王? MTK 蔡明介想過這個問題, 黃仁勳也想過. 兩個人遇到的狀況不同, 解法也不一樣. 黃仁勳認為會有一代拳王的是因為大家技術差不多, 但開發一顆 IC 要一年半的時間. 所以當你暫時領先, 對手的新產品就會比你厲害! 假設產品規格並沒有太大的改變, 只要規格疊得高, 那一代新人換舊人就是理所當然的.

黃仁勳解決這個問題的方法是成立不同 project, 開發週期彼此交錯, 共用資源和資訊, 隨時調整規格, 並且準時交貨. 從外界來看, Nvidia 推出產品的時間自然而然就縮短了, 對手很難在兩代產品交接的空檔中找到切入點! 當然這是在 graphic card 大混戰的時代才適用的策略. 如果大勢已定呢? MTK 理所當然去找下一個明星產品, 而老黃則是直接把現在的產品調整到直指未來.

他怎麼做到的呢? 當然就不是兩三句話那麼簡單. 總之我認為他好好地接受了不平凡的建議, 又壓榨出了驚人的成果. 像是光追, tensor, CUDA, NPU, GPU (替代 graphic card) 這些都是底下的人想出來, 再透過老黃鋼鐵的意志實現它. 底下會提到 Nvidia 發明了 GPU 這個名詞來和 graphic card 區隔.

Q2. 為何要叫做 GPU? Nvidia 的產品經理認為他們 graphic card 可以同時處理 4 個 pixel, 能做圖形的旋轉平移, 這些都取代了原本的 CPU 程式, 所以應該叫做 GPU. 於是老黃就在 1988 年 8 月宣稱他們的 GeForce 256 是全世界第一顆 GPU, 即使那顆 GPU 還是要下 register 才能叫它做事, 還不能真的寫高階程式語言.

Q3. 為何雲端運算需要 GPU? 這要先從高速運算說起. Nivia 的團隊在設計 Geforce 3 時, 為了解決 render 上較複雜的計算, 開發者藏了一些可編程的運算單元在圖形處理之中. 當然這代表 GPU 就有了一些浮點矩陣運算的能力. 即便只能用 OpenGL 或是 Nvidia 的 Cg (C for graphic) 來 coding, 至少硬體非常強大.

高速運算原本是 CPU 的市場, 強大的 CPU array 就是超級電腦. 當學者或研究單位擁有超級電腦, 就可以快速地完成複雜的計算. 但沒有被分配到這類珍貴資源的學者, 就算有很好的想法也無法領先發表論文, 輸家就永遠是輸家. 久而久之就形成了學術壟斷.

2002 年, 有位馬克哈里斯 (Mark Harris) 研究員發現許多科學家開始用 GPU 做 “非圖形" 的研究. 狀況就跟現在很多公司、大學都用 RTX4090 而不是 DGX B200 做 AI 實驗是一樣的道理 [1]. 所以他就架了一個 GPGPU.org (generla purpose GPU) 的網站, 幫助大家活用 GPU 來代替買不起的超級電腦. 接著 Nvidia 發現了這個網站, 招募哈里斯加入 NV50 (G80) 團隊.

G80 的 GPGPU 能力比過去更強大, 不再使用 Cg, 而是推出了 CUDA (Compute Unified Device Architecture). CUDA 呼叫 GPU 的 PTX 指令集, 讓大家不需要特別去學這個架構的組合語言, 而是有專屬的 compiler 可用. 黃仁勳說: “CUDA 讓我們的成本大為增加". 但是他們達到了目的: (1) 讓所有的人都可以用 CUDA, (2) 讓 CUDA 適用於所有領域. 於是有愈來愈多人發掘出 GPU 的用途, 從模擬新藥、挖礦 (虛擬貨幣) 到訓練 AI.

當然 Nvidia 的故事也不是都這麼正面. 他們發現科學家工程師只買電腦版 500 USD 的 GPU, 而不買他們更貴的伺服器版 2,000 USD 的 Tesla (p. 378). 於是 Nvidia 自己宣稱他們 PC 版的 floating 不太準, 伺服器版才準. 在被沃克教授證實並沒有不準後, Nvidia 改為在不影響圖形輸出的程度下把它改成不準. 沃克和它的團隊又再把它 patch 回來! 並且在他在藥廠的新工作中,買了成千上萬的電腦級 GPU 來建立 data center.

Q4. 為何大家都用 Nvidia 的 GPU 訓練 AI? 別家的卻不行? 這個問題一半的答案就是 CUDA, 它不是一張繪圖卡或是遊戲卡, 而是算力卡. 若只是要畫出滿屏的圖形, Intel 自己就可以做到了. Nvidia 預先看到這一點, 因此用 GPU 和圖形輸出做出區隔. 並且賣得超級貴. 別人的產品都是 ASP (平均銷售單價) 愈來愈低, Nvidia 主打愈賣愈高, “買愈多省愈多"!

回歸 AI 這個主題. 過去的 Machine Learning 都是先找特徵, 然後統計特徵值, 根據統計原理做分類. 直到 AlexNet 出現, 才有不找特徵, 讓系統根據 label 過的資料, 自己找出規則的 Deep Learning. 當然這就不得不歸功於當初 labeling 這些 database 的先驅李飛飛. 發明 AlexNet 的多倫多大學團隊 (當然包括其中一個學生叫做 Alex) 就是使用輝達的 GeForce 500 做訓練, 他們在第三屆 ImageNet 大賽, 成果遙遙領先其他舊演算法 10% 以上 (p.425).

從此以後, 大家都知道要用 GPU 做 Deep Learning (DL). Nvidia 也看到這個 AI 商機特別大. 因此再推出 CuDNN (CUDA Deep Neural Network) 強化對 AI 的支持度. 對於一般高速運算的市場, 硬體需要支援 FP32 或 FP64 (浮點 bit 數). 但是對於 Neural Network 的訓練來說, FP16 就夠用了. 因此 Nvidia 的 GPU 從 2016 年開始都支援 FP16. 而且還加入了 Tensor Core. 書上提到老黃臨時在 tape out 前幾個月說要加 Tensor, 大家怎麼趕工達標. 這個不是本文的重點就先略過.

Tensor Core 有什麼好處呢? 因為 DL model 裡面都是矩陣運算, 而 CUDA Core 只是浮點乘加器, 需要 CUDA compiler 來優化計算流程. 假如矩陣運算有特別的硬體, 那麼採用 CuDNN 來編 code 就可以更加地優化. P.433 說到,有 Tensor 快 3 倍. 這就解釋了為何大家都愛用 Nvidia 的 GPU 來開發 AI 軟體, 而不用市售的 NPU. 市售的 NPU 對於常用運算子的軟硬體優化差了 Nvidia 一大截. 所以做某些推論應用 (inference) 還可以, 整體而言是事倍倍功半半.

Q5. Nvidia 怎麼搭上 DPU? Mellanox 這家公司把 InfiniBand 這個標準做成高速網卡, 在數據中心可以 offload CPU 對網路封包處理的算力消耗. 雖然生意不錯, 但這家公司太小, 負擔不起高昂的研發費用, 最後只好賣公司. Nvidia, Intel, Xilinx 三家競標之下, Nvidia 看到它在數據中心的綜效, 因此花了每股 125 美元 (共 69 億美金) 標下股價 76.9 的 Mellanox.

接下來, 老黃又出來說我們發明了第一個 DPU. 當然, Nvidia 敢這樣講, 就是他們又投資了更多加速的軟硬體, 跟一般的 SmartNIC 做出區隔. 想要再重演一次“GPU 不等於繪圖卡”的劇本。

這本書的內容當然不只於此。或許可以用創業和經營事業的觀點再重新詮釋一次。像是保持扁平團隊,保証訊息一致,還有老黃偏執地好學等等。這部分就等我看完張忠謀自傳再來匯整好了。畢竟兩大管理者可以互相輝映。

[REF]

  1. https://www.cool3c.com/article/218920

BentoML 小整理

趁著尾牙等摃龜的空檔,把這篇的草稿丟給AI 重寫。雖然變得有點 WIKI化,不過稍微調整順序, 潤飾文字後,感覺還是滿易懂的。

BentoML [1] 是一個開源的 ML 模型服務框架,名字源自日文「便當」,代表將所有組件打包在一起。相較於 Google Cloud 的 Kubeflow 解決方案 [2],BentoML 提供了不綁定特定雲服務的部署方式。

核心特點

  1. 模型管理
  • 統一打包(模型 + 依賴)
  • 版本控制
  • 自動追蹤環境配置
  1. 框架支援
  • 支援主流 ML 框架
    • PyTorch
    • TensorFlow
    • scikit-learn
    • XGBoost
  • 多框架共存部署
  1. 服務效能
  • 高性能 API 服務器
  • 批量推理支援
  • 自動負載均衡
  1. 部署便利性
  • Docker 容器自動生成
  • Kubernetes 整合支援

實作流程

1. 模型訓練與保存

# 訓練模型
from sklearn import svm, datasets
iris = datasets.load_iris()
clf = svm.SVC()
clf.fit(iris.data, iris.target)

# 保存模型
import bentoml
bentoml.sklearn.save_model("iris_clf", clf)

2. 模型管理

# 查看最新版本
bentoml models get iris_clf:latest

# 列出所有版本
bentoml models list

3. 預測方式

3.1 直接載入

loaded_model = bentoml.sklearn.load_model("iris_clf:latest")
result = loaded_model.predict([[5.9, 3.0, 5.1, 1.8]])

3.2 使用 Runner(推薦)

# 建立 Runner 實例
runner = bentoml.sklearn.get("iris_clf:latest").to_runner()
runner.init_local()
result = runner.predict.run([[5.9, 3.0, 5.1, 1.8]])

4. 服務部署

  1. 建立服務檔案 (service.py):
import numpy as np
import bentoml
from bentoml.io import NumpyNdarray

iris_clf_runner = bentoml.sklearn.get("iris_clf:latest").to_runner()
svc = bentoml.Service("iris_classifier", runners=[iris_clf_runner])

@svc.api(input=NumpyNdarray(), output=NumpyNdarray())
def classify(input_series: np.ndarray) -> np.ndarray:
    return iris_clf_runner.predict.run(input_series)
  1. 定義部署配置 (bentofile.yaml):
service: "service.py:svc"
labels:
  owner: bentoml-team
  project: gallery
include:
- "*.py"
python:
  packages:
    - scikit-learn
    - pandas

5. 本地測試服務

bentoml serve service.py:svc --reload
  1. Web UI: 訪問 http://127.0.0.1:3000 或者
  2. API 調用:
$headers = @{"Content-Type" = "application/json"}
$data = "[[5.9, 3, 5.1, 1.8]]"
Invoke-WebRequest -Uri "http://127.0.0.1:3000/classify" -Method POST -Headers $headers -Body $data

6. 容器化部署

# 建立 Bento
bentoml build

# 容器化
bentoml containerize iris_classifier:latest

# 運行容器
docker run -p 3000:3000 iris_classifier:<tag>

7. 注意事項

  • Docker 安裝需要提前準備,過程可能較長且需要重啟.
  • 本地測試時需要注意防火牆設置.
  • Runner 模式提供更好的資源管理和效能優化.

[REF]

  1. https://github.com/nogibjj/mlops-template
  2. Google 的 flow

IC 設計公司營收排名 2024

去年的統計更新了. 幾個重點整理如下:

  1. 聯發科持續成長, 大者恆大.
  2. 瑞昱又再次超車聯詠, 螃蟹公司證明它上次搶到第二名不是偶然.
  3. 老牌公司信驊, 矽統, 世紀民生繳出倍數的成長. 世紀民生成長高達 659.47%.
  4. 業績成長或衰退雙位數的比個位數的還多. 表示競爭激勵, 不進則退.
  5. 因為幣別的關係, 譜瑞-KY 去年就放錯位置, 深感抱歉! 現在往前追溯修正.
  6. 美金最近還在漲, 以下官方如果沒有特別引用匯率, 我就用 32.5:1 來計算.
排名公司股號2024 (K NTD)成長率 (%)
1聯發科2454530,585,88622.41
2瑞昱2379113,393,69819.14
3聯詠3034102,787,751-6.92
群聯 [*]829958,935,51322.2
4世芯-KY366151,976,78265.45
5奇景光電HIMX40,300,00042.43
新唐 [*]491931,923,290-9.69
擎亞 [*]809628,157,01625.47
6慧榮SIMO26,325,0000.2748
旺宏 [*]233725,883,475-6.3
7創意344325,044,192 -4.56
8瑞鼎359224,376,80232.87
9天鈺496119,224,74618.12
10達發科技652619,122,10440.86
11矽力-KY641518,450,37519.6
12矽創801617,826,5056.6
13譜瑞496616,246,76617.99
14威盛238815,910,68625.81
15敦泰354514,538,9877.15
16晶豪科300613,485,16813.47
17義隆245812,695,8625.29
18智原303511,064,852-7.53
19原相32278,362,27343.08
20致新80818,252,6644.32
21祥碩52698,081,07126.24
22聯陽30146,632,5785.67
23信驊52746,459,666106.35
24凌陽24016,434,08624.01
25茂達61386,089,50412.43
26昇佳電子67324,940,6838.76
27神盾64624,790,32824.47
28愛普65314,176,356-0.94
29宜特 [*]32894,345,52614
30力智67193,697,96321.75
31立積49683,679,34823.28
32力旺35293,605,96818.22
33鈺創53513,473,21730.48
34創惟61043,178,69026.36
35偉詮24363,094,6197.25
36富鼎82612,918,3812.36
37大中64352,716,0852.24
38晶焱64112,744,6844.06
39松翰54712,744,4665.15
40盛群62022,501,630-3.64
41尼克森33.172,468,2610.15
42凌通49522,461,89513.61
43安國80542,192,58810.17
44沛亨62911,824,248-26.39
45凌陽創新52361,817,92710.17
46研通62291,796,99663.24
47聚積35271,792,664-3.43
48威鋒電子67561,700,310-16.45
49杰力52991,691,956-2.38
50揚智30411,628,22413.08
51系微62311,614,58820.27
52晶宏31411,507,390-18.65
53M3166431,480,903-8.15
54通嘉35881,453,90627.36
55晶心科65331,381,50730.6
56九齊64941,345,3000.92
57點序64851,261,971-25.09
58普誠6129 1,150,966-30.64
59倚強32191,137,860-1.67
60宏觀65681,065,4916.97
61海德威3268972,915-7.38
62類比科3438963,3709.51
63禾瑞亞3556955,594-16.39
64亞信3169852,618-3.94
65虹冠3257816,028-24.01
66矽統2363 738,560294.56
67迅杰6243716,549-18.14
68九暘8040644,041-10.3
69世紀民生5314643,931659.47
70驊訊6237448,7417.45
71金麗科3228424,69640.73
72旺玖6233417,22515.73
73笙泉3122364,666-1.78
74笙科5272 331,795-0.52
75鑫創3259239,109-13.25
76佑華微8024224,068-6.29
77通泰5487194,27720.6
78聯傑3094165,860-31.62
79凱鈺5468120,5681.52
80點晶328881,779-16.62
81合邦610354,87513.98
82太欣530213,91213.46

2024 年重點回顧

雖然這件事應該是昨天以前要做的, 即使我遲交了, 還是值得做個結語.

  1. 年初學了如何用 Python 處理 Excel 表格, 這個工作上用來統計 task weighting 很方便.
  2. 考慮未來是 AI 的時代, 整年到處上課和看展, 最辛苦的是拿到一張 TensorFlow Developer 證書. 畢竟老人只能說一嘴好 AI 的話, 那就沒有啥說服力。
  3. 考慮到數據中心很重要, 我想知道它跟 AI 是什麼關係?於是做了點研究, 還拿了一張 Google Cloud 的Machine Leaning Engineer 證書.

4. 至於最花錢的課莫過於這個. 在 Amazon Skill builder 一個月花了 905.21 美金. 其實只跑了兩個 model. 因為菜鳥不懂得用完要下線, 下一個月又白白被多 charge 一次. 真是花錢如流水~~~

5. 年中老闆說部門缺專利, 我一口氣申請了 7 個. 本來想湊十個, 不過部門目標已經達成了。考慮到邊際效益遞減,我還是把腦力保留到 2025, 不需要做無效的攻擊. 整年共獲得 10 個專利, 台灣新增 6 個, 美國 2 個, 大陸 2 個. 當然這些是前幾年申請的.

6. 出差去印度, 解鎖了一個我旅行清單中偏難的項目。可惜出差行程不可能看到什麼大景, 就是到此一遊。主要亮點還是和家人去了日本和土耳其. 家庭旅遊的部份 pilot run了 “帶家人坐商務艙到處去旅行" 的願望. 重點是這年可以完全丟下小孩, 因為她自己跑去澳洲打工度假了.

2024 年都在學技術, 沒讀到幾本書. 本來說要學英日文都沒進展, 說要減重還胖了!? 這、這是冬天的關係吧! I hope so. 總之, 2024 學了一些新知識. 2025 年希望學更多知識, 也希望跟工作做更多結合.

去年年底網路上很多人 po 文說 2025 =452, 所以這是很特別的一年. 同學還找了更多組合, 像是 (1+2+3+4+5+6+7+8+9)2 = 2025 之類. 其實根本就同一件事. 既然如此, 那今年就是海綿寶寶年了! 讓我們用海綿寶寶考駕照的精神迎接一整年的挑戰吧! 诶? 不對! 他好像一直沒考上耶!? 忘掉駕照, 我們學習他的樂觀就好了. 加油!

2024 年終投資回顧

2024 年拜 AI 科技浪潮之賜, 投資又再度創新高了. 今年的大盤強勁, 台灣和美國市場都是. 我也沾光搭上順風車. 雖然比不上眼光精準的單壓高手, All in 台積電什麼的可以漲八成, 至少算是穩定發展.

別人的績效台積電
(不含息)
台股漲幅 (不含息)台灣 50 報酬指數 [1]S&P 500 [2]NasDaq 100 [3]
全年漲幅81.28%28.85%48.96%23.84%24.88%

我自己有兩個版本的投資統計, 第一個計算方式是從 2004 年開始, 從第一簍螃蟹開始, 不靠薪水加持, 只是讓投資和股息再投資自己長大. 因為基期比較低, 所以增幅比較好看, 但總數比較小.

第二個計算方式是把每年上班存下來的薪水都投進去滾雪球, 我想大部分的人都是這樣算的. 甚至我猜網紅老師們也會把開課賣書的錢再投入當作績效, 這樣總數會比較大, 但年增率會比較少.

我的 2024 績效一簍螃蟹版薪資投入版
全年漲幅38.14%25.16%

我自己的投資組合偏美股, 0050 還占不到 10%, 所以績效也比較像美股. 何況買進指數型 ETF 不需要燒腦, 就算雪球滾得比別人慢, 但是一路直下, 從來不用擔心撞到大石頭後砸個粉碎, 頂多就是路上遇到幾個小土坡小水漥之類的.

我之所以要記錄兩個版本的理財績效也是同樣的道理. 大家都知道新竹工程師薪水比較高, 但理財數據如果都加計薪資收入, 最後就很難分辦到底績效是來自投資正確? 還是純粹老闆給得多? 假設我年底結算獲利 30%, 但其中 40 % 來自薪水, 投資其實倒虧 10% , 那不就搞笑了.

抱持著這樣的想法記錄了 20 年, 結果發現了另外一種趣味. 38.14/25.16 ~= 1.52. 雖然兩邊分子分母都不一樣, 但是分子接近. 它反映出我上這 20 年的班 (2024~2004), 合計貢獻了我的總資產的 1/3 左右 (1.5 ~= 3/2). 2/3 還是紮實地來自第一簍螃蟹的滾雪球效應.

0050 的報酬指數 [1] 在 2004/1/2 是 4,796.17, 2024/12/13 是 43,273.81, 一共成長 9.02 倍. 我的績效稍好一點落在 10.5 倍. 所以這 20 年不靠薪水, 也可以累積 10.5 簍螃蟹的資產. 對於大部分的人來說, 如果能乘著時光機回到 20 年前, 跟自己保證未來能安心財富增長到 9 倍, 我想人生的選擇可能會有點不一樣吧! BTW, 能穿越回到 20 年前, 最想告訴自己的應該不是這件事啦!

這也證明只要時間夠長, 投資對地方, 其實退休金不應該是大問題. 第一桶金夠多的, 可以早點退休, 第一桶金少的把 20 年拉長到 30~40 年一樣可以累積足夠資產. 既然 20 年時間都可以無腦 9 倍以上. 40 年有 2 個 20 年, 沒有翻個幾十倍說不過去. 假設有個好工作, 還可以再錦上添花多出 1/2 (佔 1/3). 我統計的這段時間還是包括金融海嘯和 covid-19, 未來 20 年中頂多再慘一些些吧, 這個理論應該沒錯!

或曰, 道理我都懂, 我就是沒錢投資啊!? 那就是另外一個故事了. 正所謂新把戲變不出老狗, 一定要先把小狗養大才有機會變老. 吃土鋁繩巴逆逆講得很好. 專注本業, 有第一桶金之後才能開始滾動雪球. 如此持續操作二十年就可成功. 下方業配省略, 請自行追蹤鋁繩了解.

抒發完感言, 來講今年的缺失. 反正人非聖賢, 要接受自己做不好才會有進步. 然後講一下 2025 年的規劃.

[失誤區]

  • 首先是 Q3 的大跌後, 我從不怎麼跌的 SGOV 和 BERK.B 挪出資金來買 QQQ 和 PFF. 逢低買進是做對了, 但我覺得跌得不夠, 所以幾乎沒砸多少錢. 剩下的只好改成定期定額慢慢買, 這點小小可惜. 當初全部 all in 才有換股操作的意義.

  • Q3 的震盪中, 我只懷抱安心持有的情懷, 完全沒關注 KO 和 SHEL 竟然創高之後一路下跌. 說實在的, 如果不是要寫回顧, 我都沒發現它們跌超過 15% 了. 幸好我在疫情間買得很便宜, 這兩檔的 ROI 還是極好的雙位數百分比, 但若能牢記他們是景氣循環股, 我還有機會賣掉他們換錢, 所以今年他們創 52 週新高就賣!

KO 從年中最高點跌 15.33%, SHEL 從年中最高點跌 16.02%.

[小確幸]

  • 每次美國公布利率政策, 都會造成暴漲暴跌. 特別是暴跌後都會很快漲回來. 如果是從台灣複委託賣股票, 因為資金交割的關係, 其實無法立刻下單買進. 但錢放在美國券商的不同了. 看到 QQQ 暴跌, 可以馬上賣 SGOV, 買 QQQ, 即使我們睡了一覺起來美國已經休市了, 還是可以用盤後賣 + 第二天盤前買接力完成換股操作的交易.
  • 比特幣賣掉後投入股市. 雖然錢不多, 但也是一筆業外收入.

[新計畫]

  • 原則上 buy and hold. 但兩檔景氣循環股 KO 和 SHEL 若創新高, 我會慎重考慮把它賣掉.
  • 先前有一些美金是用 3.95% 的固定利率定存的, 現在美金定存一年的利率只有 2.6%. 所以美金定存到期都不續約, 準備買配息的優先股或是債券.

最後附上持股比例圓餅圖, 成分股跟 Q3 都一樣. 只是有股息再投入和定期定額稍微改變了比例.

主要賺錢還是靠 QQQ, 貢獻 50 % 的成長, 台股 0050 持股少漲幅大, 貢獻 23%, SPY 貢獻 13%, VIG 6%. 然後殼牌股價 Y2Y 跌 4.8%, 因為佔我的市場權重 10%, 雖然有配息還是虧, 合計貢獻年度收益 -0.25%, 成為 2024 年唯一的老鼠屎.

[REF]

[1] https://www.twse.com.tw/zh/indices/ftse/tai50i.html

[2] https://www.macrotrends.net/2526/sp-500-historical-annual-returns

[3] https://www.slickcharts.com/nasdaq100/returns