親愛的同學們,
感謝各位對於這門課的興趣,2023年春季班是第一次開設這門以人工智慧運算晶片設計為主題的進階課程,在這之前我們開了兩學期的入門課程(AIAS),累積了一批想在人工智慧晶片領域深耕的同學,今年我們希望帶領這些同學繼續往一些更深入的主題探討,為了協助各位更了解這門課程是不是適合你,這封信會針對我們開課的目的、課程設計的方式、課程的要求與我們想招收的學生做一些說明。由於這門課是選修課程並非必修課程,當你決定來修這門課的時候,請認真思考你修課的目的是否與我們課程設計的核心概念相符合,我們希望把所有的教學資源用於協助真正需要的同學,由於成大選課系統的諸多限制, Playlab 的課程, 採用登記選課的方式, 希望能讓適合的同學選到這門課,而不是選了課之後退選或是要花費不必要的時間在選課系統上掙扎,為了避免造成一場美麗的誤會,耽誤了各位同學的青春,與錯置教學團隊一廂情願的熱忱,希望各位詳細了解這封信裡的細節,並審慎評估這門課是否適合你,整個教學團隊希望能把資源留給真正想修這門課的同學。這學期我們如果能幸運聘任到另外一位國外回來的新聘老師,她將會與我共開本門課程來協助各位同學。
開課目的
這門課是智慧運算碩士學程裡作為人工智慧加速晶片設計的進階課程, 但是我們同學也開放給大學部已經修過入門課程(AIAS) 的同學選修,我們設定給必須具有基本C or C++ programming、基本Digital Design概念、 基本CPU Design概念的同學來選修,如果你修過AIAS 你會有基本足夠的能力,如果你沒有修過AIAS, 但是有修過computer architecture 以及VLSI design 的同學來修這門課,你可以來修這門課,但是會建議你開學前要花時間學習Chisel 這個硬體描述語言,並複習足夠的C programming 能力再來選修這門課。沒有修過相關課程的同學, 想要修這門課程的話,可以嘗試在開學選課截止日前(3/3) 看能否順利完成Lab 10 — Pipelining RISC-V 來決定,這個Lab 是 一個5-staged pipelined CPU Design,除了你要有基本的CPU 設計概念之外,另外整個實作是以Chisel programming 為主,再加上最後測試的方式是要寫Assembly test 來測試,你會了解自己是否有足夠的綜合能力,能往更深入的Topics 前進學習,相關的課程在電資學院或是工學院的一些科系可能有提供,前兩學期有一些來修課的同學因為背景概念不足,導致在寫Lab 實作的時候很辛苦,我們會建議背景不足的同學可以先修AIAS 把背景補足了,下次再來選修這門課,另外決定選修的同學,建議你在寒假時預先學習準備,這會幫助你在開學之後盡快進入狀況。
這門課跟其他系統相關課程的不同之處如下:
- 著重於介紹人工智慧加速晶片設計的基本開發流程與實作
- 著重於軟硬體協同設計的概念
- 著重於理解通用型(general-purpose) 跟客製化(domain-specific) 設計上的差別
- 著重於介紹如何用軟體模擬硬體設計的方法
- 課程以Advanced computer architecture topics 出發,再以針對AI 加速的特殊應用領域如何做加速設計深入探討
人工智慧加速晶片在過去幾年快速蓬勃地發展,有別於傳統晶片設計,人工智慧晶片的開發並沒有一定的標準架構,不同人工智慧應用領域所需要的人工智慧晶片也有所不同,並沒有一個通用型的人工智慧晶片能滿足所有應用的要求。這門課目的在引領你知道學習人工智慧晶片設計的基礎必備知識之後,深入了解晶片設計在High-performance CPU design 上以及人工智慧應用上所需考量的議題,如果你修完這門課能了解到自己的興趣所在,歡迎你來申請就讀敏求智慧運算學院的預研或是碩士班,我們學院的AIOnChip 計畫是全台灣少見能提供你良好學習環境,接近業界實戰經驗訓練的研究計畫,它能協助你強化自己的背景知識與專業技能,做好投入職場或是高等教育的準備。這門課的實作部分會花費很多的時間,如果同學能完成這門課的所有實作作業與專題,我預期同學在申請Internship 或是相關研究所領域時,會因為這門課打下很好的基礎。
課程設計的方式
人工智慧晶片設計橫跨多個領域的專業,在短短18週的課程中,很難一窺全貌,在這門課中,我們會以主題式學習的方式,來介紹一些基本的理論與實作基礎。我們的課程分為下面幾部分:
- 基本理論教學
這門課每個階段的教學會有一個主題,可能是該主題的入門概論,可能是理論基礎課程,也可能是從實作面出發的主題討論課程,在期末專題提案之前,每一個探討的主題,都是為了協助同學了解人工智慧晶片設計的流程與基礎,課程前半段以進階的computer architecture 主題為主,後半段以人工智慧應用領域在晶片設計上一些重要的概念為主。
Section 1. Advanced CPU Pipeline Design
- Week 1 (Feb 17): Introduction
- Week 2/3 Superscalar
- Week 4 Super-pipelining and Branch Prediction
Section 2. Advanced Cache/Memory Hierarchy Design
- Week 5 Advanced Caches
- Week 6 Memory Management
Section 3. Parallel Computing
- Week 7 Multithreading
- Week 8 Parallel Programming
- Week 9 GPU & CUDA Programming
Section 4. AI Computing Acceleration
- Week 10 Introduction to DNN
- Week 11 Quantization
- Week 12 Kernel Computing
- Week 13 Dataflow
- Week 14 Accelerator Design
- Week 15 Network-On-Chip
- Week 16 Mapping
- Week 17 Software/Hardware Co-Design
由於學院的碩士班課程剛開始建置,ACAI 這門課被迫把多門重要的課程內容濃縮成一學期18 周的課程,我們希望在兩年內把這門課程能拆成三門課程分開授課,讓每一門課能真的涵蓋足夠多的背景知識,這學期我們希望能在這門課做到的是,讓每個同學能對大多數的主題有一些初淺的認識,建立起整個人工智慧晶片設計的系統概念,至少讓想進入AIOnChip 大型整合計畫的同學能有一定的基礎開始。
2. Lab
Playlab 課程一向非常重視實作與理論的平衡,做中學與Project-Based Learning 一直是Playlab 課程設計的核心,也是很多同學實質受益於Playlab 課程的原因,非常多同學反應在成大的理論課程非常多,但是在很多實際的場域不知道要如何應用,Lab 的設計目的在降低學用落差,這學期我們特別針對這門課程,設計了軟硬體整合的實作課程,讓同學在理論學習之外,能有親自動手的機會,練習一些有趣的工程實作,這些Lab 跟課程的關聯性很高,需要花時間練習跟理解,同學要有心理預期每週會需要投入一定時間 (10–20 hrs) 來完成Lab 作業,我們的Lab 分兩個Section,Playlab 目前為止在AI 晶片設計的學習訓練上共設置了 21 個Lab, 接續在AIAS 那門課裡的9 個Lab, 這門課接著另外兩個Advanced Topic Section,一個section 深入討論CPU Design 上的重要議題,另一個section 介紹AI Computing Acceleration 上的一些基本概念,這兩個Advanced Topic Sections 新增了Lab 10 ~ Lab 18 ,同時我們這學期的AI Capstone 專題選修也提供另外三個Lab,讓成大的同學有志於從事AI Accelerator 工作或研究的人,能有更好的學習環境與實作課程。
Section 1 — Software & Simulation (在AIAS 那門課裡的Labs)
- AIAS Lab 1 — C programming review
- AIAS Lab 2 — C memory management review
- AIAS Lab 3 — RISC-V assembly
- AIAS Lab 4 — RISC-V emulator
Section 2 — Hardware Design and Chisel (在AIAS 那門課裡的Labs)
- AIAS Lab 5 — Chisel Tutorial && Datapath Design
- AIAS Lab 6 — Finite State Machine Design
- AIAS Lab 7 — RISC-V Implementation I — Single Cycle CPU Design
Section 3 — AI Computing Acceleration Introduction (在AIAS 那門課裡的Labs)
- AIAS Lab 8 — RISC-V standard Extension && SIMD instructions
- AIAS Lab 9 — Memory-Mapped I/O && Conv2D Acceleration
Section 4 — Advanced Topics in CPU Design
- ACAI Lab10 — Pipeling RISC-V : 5-stage Pipelined RISC-V Core in Chisel
- ACAI Lab 11 — Caches
- ACAI Lab 12 — Branch Prediction
- ACAI Lab 13 — Data Prefetching
Section 5 — Advanced Topics in AI Computing Acceleration
- ACAI Lab 14 — Parallel Programming With CUDA
- ACAI Lab 15 — NN Graph Transformation and Optimization
- ACAI Lab 16 — NN Graph Scheduling and Resource Allocation
- ACAI Lab 17 — AI Software Stack Porting
- ACAI Lab 18 — Quantization in AI Inference
Section 6 — Advanced Topics in AI Capstones (在AI Capstone 專題課裡)
- AICapstone Lab 19 — Event-Driven Analytical Model & performance analysis
- AICapstone Lab 20 — Performance modeling
- AICapstone Lab 21 — FPGA Prototyping
4. Invited Speaker
每學期我們都希望安排特別來賓的演講,邀請的清單會在演講時間接近時公告,我們希望透過這些來賓,跟大家介紹外面業界的現狀與給同學一些學習求職的建議。
5. Final 上機考 Bonus
這門課程我們沒有期末考, 但是我們提供給同學一個期末加分的機會,在期末考當週,我們會預期你已經做完Lab10 ~Lab 18, 我們會有上機考的選項,內容是老師會提供Lab 10~Lab 18的新測資,來讓同學測試自己的設計是不是正確的,如果你的設計很Robust, 遇到新測資的時候就會正確運作,那你可以直接拿到Bonus 的分數,如果你的設計考慮並不周全,往往老師給你新測資的時候,並不會正確,此時如果你能在上機考的三小時內修正正確,你一樣能拿到Bonus 的分數。
選課的要求
這門課我們不點名,我們的課程但是我們著重各種形式的課程參與,鼓勵大家提問跟參與討論,每週的作業與Lab預計是10–20小時的loading,基本的評分標準如下:
- Lab Submission 60%
- Lab Quality 20%
- Bonus 10%
- Final 上機考10%
整體來說,你要在這門課及格的基礎是Lab 10~18 共8 個Lab 要交(Lab 11/12 擇一即可),要有更高分數的方法如下:
- 8 個Lab 全部在學期結束前有交完即有60分
2. 達到60 分的標準後,如果Lab 有準時交,Lab 錯了訂正完,你的分數就有80 分。 如果你沒準時交或有錯沒訂正完,你就很難拿到Lab Quality 的滿分
3. Final 上機考佔10 分, 立志一定要拿90 分以上的同學,請務必參加考試
4. 我們有非常多加Bonus 分數的機會:
- Lab Bonus
- 作業Bonus
- 幫助同學
- 上課積極參與挑論
期末時如果成績與你的預期有落差,老師會開放extra bonus points ,有一些同學為了爭取更好的分數,可以選擇提案加分的方式
這門課的評分標準設計,是希望同學能付出時間與努力來學到該學習的內容,教學團隊不只不希望為難同學,更希望幫助同學透過自己的努力爭取高分,而且每個人事實上只要願意花時間努力,都有高分的機會。
你是否適合修這門課的建議
以下類型的同學,我們會建議不要來選修這門課:
- 只是為了湊學分的同學
- 除了上課,沒有時間寫作業的同學
- 會想翹課的同學
這門課並非必修課,因為Lab 跟上課的內容都不是你自己上網找資料就一定會做的,所以我們希望修課的同學能盡量把Lecture Video看完,並盡量來參加討論課,我們期待同學來上課時會覺得花的時間有意義,並且有所獲得,除了我們教學團隊應該兢兢業業不斷努力於教學品質的提升,更需要同學跟我們一起努力。
依據老師過去的經驗,同學可能會有一些錯誤的想像:
- 修這麼課不太需要花時間 — 這門課的內容跟業界的工作內容沒什麼太大差別,只是我們簡化了很多設計題目,但是用比較新的流程與工具來讓大家實作,因此實際狀況是每週要花不少時間,有同學覺得Lab 太難,但是我認為最大的問題在於同學都太晚開始做Lab,一旦有期中考或期末考,這門課能花的時間就會被壓縮,所以如果你想修這門課,請務必要學會自律,能儘早開始,因為我們的Lab 會盡量提早上線,老師定的進度是正常進度,你至少不能比正常進度慢,但是如果你平常有空時,我會鼓勵同學超越進度做Lab, 這樣你期末才有更多的時間跟空間可以調整。
- 修這門課花太多時間 — 雖然Lab 看起來很多事情,但是因為教學團隊做了很多設計,如果同學遵循我們的建議,都有來上課,同學會比較用很少的時間做到要達成的目標,如果你不來上課,或是都拖到最後一刻才開始,又或者沒有遵循教學團隊的建議,你很可能會事倍功半,耗費非常多時間。
- 這門課是大碩的課程,loading 與難度都比大學部的重是正常的,目前成大的curriculum 讓很多同學到大四研究所才開始探索相關領域的情況之下,很多人的背景知識不足,需要非常多時間補足,我們課程設計的目標是以一個碩士生要開始做AI晶片設計研究時該有的基本能力為基礎,也因而我們並不想因為學生的程度來做調整,反而是會在大學部開更多的背景知識課程來協助同學準備,因為學院剛開始,開的課程無法很多元的情況之下,這門課目前是以AIOnChip 計畫裡學生需要的背景知識為設計的起點,將來我們能開出更多課程的情況之下,我們會再進行更多的調整。