Machine learning systems are increasingly being deployed in production environments, from cloud servers to mobile devices. This course will focus on challenges inherent to engineering machine learning systems to be correct, robust, and fast. Assignments will be project focused, with students building and deploying systems for applications such as text analysis and recommendation systems. In addition to machine learning models, practical topics will include: tensor languages and auto-differentiation; model debugging, testing, and visualization; compression and low-power inference. Guest lectures will cover current topics from local ML engineers.
Instructor: Prof. Alexander (Sasha) Rush
TA: Ge Gao
TA OH: Friday 10 - 11am (Zoom https://cornell.zoom.us/j/98824639018?pwd=a2FndFV1eHNNc2FRNUdjcmRONURtdz09 with passcode 5781)
Course Frequency:Fall Term
Times: Tues - 11-11:50am & Thurs 11-11:50am and 9-9:50 pm.
CS 5781 is a course designed for students interested in the engineering aspects of ML systems. Instead of surveying different tasks and algorithms in ML, the course will focus on the end-to-end process of implementing, optimizing, and deploying a specific model. By limiting ourselves to a fixed model architecture, we will be able to better examine each aspect of the pipeline leading to final deployment, and examine the trade-offs in training, debugging, testing, and deployment, both at a low-level (hardware) and at a high-level (user tools). CS 5781 will be less mathematically demanding than other ML courses, although it does require familiarity with matrices and derivatives. On the other hand, it will be significantly more programming intensive. Each assignment will require completing significant programming exercises in Python, leading up to full implementation of ML systems.
This year the course targets non-linear, dense logistic regression, roughly “deep learning”, models. The following are the main units covered. There will be additional sub-units throughout the semester.
- Unit 0: Machine Learning in Practice
- Unit 1: Training from Scratch
- Unit 2: Programming Tensors
- Unit 3: Thinking in Parallel
- Unit 4: Debugging ML: Vis, Experiments, Hyperparams
- Unit 5: Deploying ML: Inference, Energy, Robustness
- Unit 6: Shape of Things to Come
• Mastery of the key algorithms for training and executing core machine learning methods.
• Understanding of the computational requirements of running these systems.
• Practical ability to debug, optimize, and tune existing models in production environments.
• Skills to develop front-ends to easily interact with and explain predictive systems.
• Understanding how bias can be propagated and magnified by ML systems.
• Facility to compare and contrast different systems along facets such as accuracy, deployment, and robustness.
Prerequisites: CS 2110 or equivalent programming experience
Math: Students need to be comfortable with calculus and probability, primarily differentiation and basic discrete distributions. The course does not require proofs or extensive symbolic mathematics.
CS: This course is programming intensive. Students should have strong familiarity with Python and ideally some form of numerical library (e.g. numpy, scipy, scikit-learn, torch, tensorflow). Students should have familiarity with foundational CS concepts such as memory requirements and computational complexity.
Assessment and Deliverables
The assessment structure of MLE is completely problem-set and quiz-based. There will be no exams. Throughout the semester there will be 6 problem sets (roughly every two weeks). Students may work in teams, but must submit their own implementations.
The goal of the class is for each student to build their own ML Framework from scratch. Each assignment adds one component to the framework, and by the end of the semester students will be able to efficiently train ML models efficiently with their own framework.
The problem sets:
* Assignment 0: Testing, Modules, and Visualization
* Assignment 1: Auto-Derivatives and Training
* Assignment 2: All about Tensors
* Assignment 3: Speeding Things Up
* Assignment 4: Building Real Models
* Assignment 5: Onward
Q: How should I attend class?
A: This semester our courses are structured to have one lecture one Tuesday Morning (11am NY) and one on Lecture / Lab on Thursday Morning 11am / Thursday Evening 9pm. You will be required to attend one lecture and watch the other on recording.
The first lecture be given twice. Either 11am NY or 9pm NY . If you are registered for the course you can click on the 'Zoom' link on the sidebar to access the course material. Or use these links 11am (https://cornell.zoom.us/j/96772353391?pwd=YmdxQnBCcEZPL05sRGZISUJoVmtLZz09) and 9pm (https://cornell.zoom.us/j/92357230913?pwd=TEtncTZjdjhOSFVDczJtcWRYOHl4QT09)
Q: What resources do I need to complete the class?
A: The course will require you to have a python development environment set up, ideally on your own machine or on a cloud server. It does not need to be very powerful nor will that help you do better in the class. We will have some lectures using GPUs, but will use Google Colab for these lectures.
Q: What technologies do I need to know to complete the class?
A: This is a software engineering style course, and so we recommend that you have a strong background in standard tools such as Git and GitHub, Python, and command-line programming.
Q: What math do I need to know to complete the class?
A: This course will require light-undergraduate level calculus and vector manipulation. We will provide resources for reviewing these aspects in homework assignments.
Q: How will the course schedule interact with Project Studio?
There will be three Thursday lectures which will be moved to Sunday due to interaction with Project Studio Maker Days.
The syllabus page shows a table-oriented view of the course schedule, and the basics of course grading. You can add any other comments, notes, or thoughts you have about the course structure, course policies or anything else.
To add some comments, click the "Edit" link at the top.