給想選修「Fall 2022 人工智慧運算架構與系統」課程同學的一封信

Wei-Fen
14 min readJul 22, 2022

--

親愛的同學們,

感謝各位對於這門課的興趣,2022年二月春季班第一次開設這門以人工智慧運算晶片設計為主題的入門課程,為了協助各位更了解這門課程是不是適合你,這封信會針對我們開課的目的、課程設計的方式、課程的要求與我們想招收的學生做一些說明。由於這門課是選修課程並非必修課程,當你決定來修這門課的時候,請認真思考你修課的目的是否與我們課程設計的核心概念相符合,我們希望把所有的教學資源用於協助真正需要的同學,由於成大選課系統的諸多限制, Playlab 的課程, 採用登記選課的方式, 希望能讓適合的同學選到這門課,而不是選了課之後退選或是要花費不必要的時間在選課系統上掙扎,為了避免造成一場美麗的誤會,耽誤了各位同學的青春,與錯置教學團隊一廂情願的熱忱,希望各位詳細了解這封信裡的細節,並審慎評估這門課是否適合你,整個教學團隊希望能把資源留給真正想修這門課的同學。

開課目的

這門課是智慧運算學分學程裡作為人工智慧加速晶片設計介紹的入門課程, 我們設定給必須具有基本C or C++ programming 能力的同學來選修,同時希望同學在上課之前要有一些基本的數位設計邏輯概念, 如果有修過computer architecture 或是 VLSI design 的同學來修這門課,相對會比較簡單, 沒有修過相關課程的同學, 需要花比較多時間來學習跟實作lab ,相關的課程在電資學院或是工學院的一些科系可能有提供,上學期有一些來修課的同學因為數位設計邏輯概念不足,導致在寫Lab 實作的時候很辛苦,我們會建議背景不足的同學可以參考Resources to help you prepare for the AIAS/AI Capstone Course 裡面列舉的一些線上資源,在暑假時預先學習準備,這會幫助你在開學之後盡快進入狀況。

這門課跟其他系統相關課程的不同之處如下:

  1. 著重於介紹人工智慧加速晶片設計的基本開發流程與實作
  2. 著重於軟硬體協同設計的概念
  3. 著重於理解通用型(general-purpose) 跟客製化(domain-specific) 設計上的差別
  4. 著重於介紹如何用軟體模擬硬體設計的方法

人工智慧加速晶片在過去幾年快速蓬勃地發展,有別於傳統晶片設計,人工智慧晶片的開發並沒有一定的標準架構,不同人工智慧應用領域所需要的人工智慧晶片也有所不同,並沒有一個通用型的人工智慧晶片能滿足所有應用的要求。這門課目的在引領你知道學習人工智慧晶片設計的基礎必備知識,了解晶片設計在人工智慧應用上所需考量的議題,如果你修完這門課能了解到自己的興趣所在,敏求智慧運算學院未來有一系列的相關基礎與進階課程,能協助你強化自己的背景知識與專業技能,做好投入職場或是高等教育的準備。這門課的實作部分會花費很多的時間,如果同學能完成這門課的所有實作作業與專題,我預期同學在申請Internship 或是相關研究所領域時,會因為這門課打下很好的基礎。

課程設計的方式

人工智慧晶片設計橫跨多個領域的專業,在短短18週的課程中,很難一窺全貌,在這門課中,我們會以主題式學習的方式,來介紹一些基本的理論與實作基礎。我們的課程分為下面幾部分:

  1. 基本理論教學

這門課每個階段的教學會有一個主題,可能是該主題的入門概論,可能是理論基礎課程,也可能是從實作面出發的主題討論課程,在期末專題提案之前,每一個探討的主題,都是為了協助同學了解人工智慧晶片設計的流程與基礎,有了這些基本知識之後,期末的專題提案,我們提供幾個可能的方向,讓同學能應用所知所學去設計基本的人工智慧運算加速功能。

主題1. AI 模型與相關運算介紹 — 這個主題主要介紹Neural Netowrk 的模型運算都在做什麼?有什麼特性? AI 運算加速晶片主要要解決的問題是什麼

主題2. 數位設計基礎 — 為了設計基本的人工智慧加速功能,我們會介紹基礎的數位設計概念,包含Datapth 跟 Finite state machine Design,同時介紹一個硬體設計程式語言Chisel, 以及相關的實作。

主題3. 軟硬體協同設計基礎 — 人工智慧晶片的設計可以分為通用型與客製化的設計,也可能是混合型的異質性系統,無論是那一種設計方式,AI 的加速功能都是透過硬體與軟體的協作設計來達成的,在這個主題中,我們會透過介紹基本的RISC-V 微處理設計,來說明整個軟硬體協同設計的流程。

主題4. 人工智慧運算加速專題實作 — 最後這部分的主題是期末專題實作,我們的期末專題是Optional, 主要是讓想爭取高分的同學選做, 根據上學期的經驗,大部分的同學能把Lab 9 完成就很不容易了, 我們配給Final Project 的分數是學期總成績的10%,換句話說,如果你不做Final Project, 最高的分數就是90分,如果你想要有高於90 分的分數,老師會鼓勵你一定要做期末專題,期末專題可以是 1~5人一組。

2. Lab

這學期我們特別針對這門課程,設計了軟硬體整合的實作課程,讓同學在理論學習之外,能有親自動手的機會,練習一些有趣的工程實作,這些Lab 跟課程的關聯性很高,需要花時間練習跟理解,同學要有心理預期每週會需要投入一定時間 (10–20 hrs) 來完成Lab 作業,我們的Lab 分三個Section,根據上學期AIAS 修課同學的狀況,在這個暑假又把Lab 0~9 做了更多的說明跟整理,為了因應一些有基礎的同學想要更有挑戰性的Lab,我們積極在籌備另外兩個Advanced Topic Section,一個section 深入討論CPU Design 上的重要議題,另一個section 介紹AI Computing Acceleration 上的一些基本概念,但是這兩個Advanced Topic Sections 並不在這門課的要求之內,新增的Lab 10 ~ Lab 17 是讓想要更有挑戰性Lab 的同學能有一些學習上的選擇彈性,從Spring 2023 開始,我們會把課程拆成兩門課,一門是大學部學分學程的AIAS 主要包含了 Lab 0~ Lab 9,另一門是大碩合開的 Computer Archecture and Neural-Network Accelerator (CANNA) 包含了Lab 10~ 17。讓成大的同學有志於從事AI Accelerator 工作或研究的人,能有更好的學習環境與實作課程。

  • AIAS Lab 0 — Introduction and working environment setup (Week 1)

Section 1 — Software & Simulation

  • 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 Lab 5 — Chisel Tutorial && Datapath Design
  • AIAS Lab 6 — Finite State Machine Design
  • AIAS Lab 7 — RISC-V Implementation I — Single Cycle CPU Design (如果你修過計組, 覺得Single Cycle CPU 太簡單,你可以選擇做Lab 10)

Section 3 — AI Computing Acceleration Introduction (AIAS requirements)

  • 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 (Not requirements in this course)

  • AIAS Lab10 — RISC-V Implementation II — 5-stage Pipelined RISC-V Core in Chisel (Optional )
  • AIAS Lab 11 — Caches
  • AIAS Lab 12 — Branch Prediction
  • AIAS Lab 13 — Data Prefetching

Section 5— Advanced Topics in AI Computing Acceleration (Not requirements in this course)

  • AIAS Lab 14 — Quantization in AI Inference
  • AIAS Lab 15 — NN Graph Transformation and Optimization
  • AIAS Lab 16 — NN Graph Scheduling and Resource Allocation
  • AIAS Lab 17 — AI Software Stack Porting

4. Invited Speaker

每學期我們都希望安排特別來賓的演講,邀請的清單會在演講時間接近時公告,我們希望透過這些來賓,跟大家介紹外面業界的現狀與給同學一些學習求職的建議。

5. Final 上機考 Bonus

這門課程我們沒有期末考, 但是我們提供給同學一個期末加分的機會,在期末考當週,我們會預期你已經做完Lab0 ~Lab 9, 我們會有上機考的選項,內容是老師會提供Lab 2~Lab 9 的新測資,來讓同學測試自己的設計是不是正確的,如果你的設計很Robust, 遇到新測資的時候就會正確運作,那你可以直接拿到Bonus 的分數,如果你的設計考慮並不周全,往往老師給你新測資的時候,並不會正確,此時如果你能在上機考的三小時內修正正確,你一樣能拿到Bonus 的分數。

6. Final Project

如前所述,我們的期末專題是Optional, 主要是讓想爭取高分的同學選做, 根據上學期的經驗,大部分的同學能把Lab 9 完成就很不容易了,同學可以自己提案或延伸Lab8 或Lab 9 的設計,期末專題可以是 1~5人一組。下面有些範例題目:

  • 讓Lenet model 在Lab 8 或Lab 9 的設計上跑Inference
  • 實作更多的Vector Extension 指令, 或設計自己的指令來讓Matmul 以及Conv2D 的運算效能更好
  • 改善Lab9 的設計,比如用AXI Bus 來取代AXI-Lite Bus 的設計部分,讓performance 變好

選課的要求

這門課我們不點名,我們的課程但是我們著重各種形式的課程參與,鼓勵大家提問跟參與討論,每週的作業與Lab預計是5–10小時的loading,基本的評分標準如下:

  • Lab Submission 60%
  • Lab Quality 20%
  • Bonus 10%
  • Final Project 10%

整體來說,你要在這門課及格的基礎是Lab 0~9 全部要交,要有更高分數的方法如下:

  1. Lab 0~9 全部在學期結束前有交完即有60分

2. 達到60 分的標準後,如果Lab 有準時交,Lab 錯了訂正完,你的分數就有80 分。 如果你沒準時交或有錯沒訂正完,你就很難拿到Lab Quality 的滿分

3. Final Project 佔10 分, 立志一定要拿90 分以上的同學,請務必做Final Project

4. 我們有非常多加Bonus 分數的機會:

  • Lab Bonus
  • 幫助同學
  • 上課積極參與挑論
  • 上機考

期末時如果成績與你的預期有落差,老師會開放extra bonus points ,有一些同學為了爭取更好的分數,可以選擇提案加分的方式

這門課的評分標準設計,是希望同學能付出時間與努力來學到該學習的內容,教學團隊不只不希望為難同學,更希望幫助同學透過自己的努力爭取高分,而且每個人事實上只要願意花時間努力,都有高分的機會。

你是否適合修這門課的建議

以下類型的同學,我們會建議不要來選修這門課:

  • 只是為了湊學分的同學
  • 除了上課,沒有時間寫作業跟做final project 的同學
  • 會想翹課的同學

這門課並非必修課,因為Lab 跟上課的內容都不是你自己上網找資料就一定會做的,所以我們希望修課的同學能盡量把Lecture Video看完,並盡量來參加討論課,我們期待同學來上課時會覺得花的時間有意義,並且有所獲得,除了我們教學團隊應該兢兢業業不斷努力於教學品質的提升,更需要同學跟我們一起努力。

依據老師過去的經驗,同學可能會有一些錯誤的想像:

  1. 修這麼課不太需要花時間 — 這門課的內容跟業界的工作內容沒什麼太大差別,只是我們簡化了很多設計題目,但是用比較新的流程與工具來讓大家實作,因此實際狀況是每週要花不少時間,Lab 9 是最難的,也是我們最終的目標,有同學覺得太難,但是我認為最大的問題在於同學都太晚開始做Lab,一旦有期中考或期末考,這門課能花的時間就會被壓縮,所以如果你想修這門課,請務必要學會自律,能儘早開始,因為我們的課程幾乎都已經上網,所以老師定的進度是正常進度,你至少不能比正常進度慢,但是如果你平常有空時,我會鼓勵同學超越進度做Lab, 這樣你期末才有更多的時間跟空間可以調整。
  2. 修這門課花太多時間 — 雖然Lab/Final Project看起來很多事情,但是因為教學團隊做了很多設計,如果同學遵循我們的建議,都有來上課,同學會比較用很少的時間做到要達成的目標,如果你不來上課,或是都拖到最後一刻才開始,又或者沒有遵循教學團隊的建議,你很可能會事倍功半,耗費非常多時間。

下面我們附上一些修課同學的統計數字跟建議,給想修課的同學參考,我們會在 7/31 號有課程說明會, 8/1 開始就接受同學先修,讓同學有時間去體會跟考慮是否這門課適合你。

我會不會推薦這門課給其他人的原因是:

  • 與電機系的課程不同,學到一些其他工具的使用,lab 內容也很創新
  • 因為這門課的負擔比我想像中的重很多,也因為我本身不是電資背景,自己基礎不扎實所以修得很吃力,系上其他同學大部分也都和我差不多背景,如果沒修過數位邏輯、計組、組語等經驗的話我認為直接修這門是有一定難度的,所以雖然我蠻喜歡這門課的,但我比較傾向推薦給部分有電資背景的同學。
  • 老師的課程、實驗都準備的很用心,可以學到很多
  • 值得學習,但要考量課業壓力
  • 課程內容扎實且貼近業界
  • 對於該領域而言非常值得修,除了學到知識也能感受出去工作的樣子,再反思自己適不適合
  • 比起自己系上的課更能培養實作的能力,更能學以致用
  • 可能會花比較多時間在寫lab上面(與其他選修課起來)
  • 我覺得老師開的課程真的是身為電資學院的學生,尤其是對 Digital Design 有興趣的人,必須修過的課
  • 會。學到很多硬體知識與 design
  • 我覺得有興趣的自己會來上 不用推薦 因為有點難度 到時候他做不出來可能會來怪我
  • 這門課對於 computer architecture 的實作有非常扎實的作業練習,相當適合有興趣朝相關領域發展的同學選修,透過實作也可以讓我們更深刻體會教科書上眾多理論的意義,同時以更全面的視角看待系統整體的架構設計問題。
  • 可以學到很實務的東西
  • 內容豐富,若有興趣將會收穫滿滿
  • 因為可以學到完整的IC設計流程,而且老師的上課影片解析了一些以前沒有弄懂得重要基本概念,而且老師和助教都很願意幫助學生,而且課程雖然有難度,但是循序漸進,因此能明顯感受到自己的進步,同時也累積一些受用許多的實作經驗,也學習到學校課程比較少接觸到的GIT、terminal、docker操作,以及學習到convention,學習到比較有效率的做事方法及在跟熱情的老師助教同學討論的過程中,了解到自己的做法怎麼改進的更好。
  • Loading很重
  • 需要具備相關知識再來修課會比較恰當
  • 涵蓋內容廣,軟硬體/上下層都涵蓋到,作為領域知識入門很推薦。
  • 這門課學到了許多和電資學院的課程不太一樣的東西,尤其是團隊合作與套論的部分,最棒的是讓我們有機會體驗一下以侯出去工作的模式和感覺
  • 推薦原因:老師助教很用心解決同學的問題,可以學到很多實作,老師也會講一些業界的狀況 不推薦原因:要花很多時間,其他loading要很少才適合修
  • 學到很多知識

--

--

Wei-Fen
Wei-Fen

Written by Wei-Fen

Computer Architect/ Professor in NCKU SOC

No responses yet