# 資訊科技產業專案設計課程作業 3 > Contributor: <[yutingshih](https://github.com/yutingshih)> <!-- ## Background & Interests ### AI Compilers ### Model Quantization --> ## Job Description ### [Qualcomm - AI Software Engineer, Core (Multiple levels)](https://careers.qualcomm.com/careers?pid=446696018340&query=AI%20Software%20Engineer&triggerGoButton=false) #### Key Responsibilities - Design, implement, optimize, profiling, analysis AI computing operations running on Qualcomm NPU. - Deliver high-quality code working with open-source software communities. - Work with key technical specialists across Qualcomm, our partners and/or customers to improve libraries for commercial use cases and/or industrial benchmarks. #### Minimum Qualifications - Bachelor's degree in Computer Science, Electrical Engineering, or a related field. - Proficiency in languages like C++, CUDA, or OpenCL for GPU programming. - Understanding of GPU/DSP/NPU architectures and parallel programming concepts. - Familiarity with embedded systems and constraints related to edge devices. - Experience in low-level programming for efficient hardware utilization. - Knowledge of optimizing algorithms and libraries for GPU/DSP/NPU execution. - Ability to analyze and optimize performance bottlenecks in GPU/NPU code. - Proficiency with version control systems like Git and software development tools like Gerrit and JIRA. #### Preferred Qualifications - Master's or Ph.D. in Computer Science, Electrical Engineering, or a related field. - Familiarity with frameworks such as TensorFlow, PyTorch for DSP/GPU/NPU integration. - Understanding of mainstream ML runtime frameworks formats and their runtime environments. - Experience in optimizing code specifically for different DSP/GPU/NPU architectures. - Understanding of machine learning and deep learning concepts for efficient utilization of hardware. - Proven experience in fine-tuning performance-critical applications on edge devices. - Knowledge of hardware-software co-design principles for edge devices. - Proficiency in using tools for debugging and profiling GPU/NPU code. - Strong communication skills to collaborate with hardware engineers and communicate complex technical concepts effectively. #### Expertise in at least one of the following areas - DSP software development and algorithm implementation: Proficiency in designing and implementing algorithms for Digital Signal Processing (DSP) in software. - OpenCL programming and debugging: Experience in programming and debugging using OpenCL, particularly for parallel computing applications. - Performance profiling and optimization for parallel computing: Strong understanding and practical experience in profiling and optimizing performance for parallel computing tasks. - Image processing, computer vision, and object/face detection specifically: Expertise in image processing, computer vision techniques, and specialized knowledge in object/face detection methodologies. - Understanding compiler technology: Familiarity with ML compilers such as TVM/Glow/XLA, as well as experience in LLVM/GCC backend development, optimization analysis, and implementation is highly advantageous. - AI experience: Knowledge of Deep Learning/CNN fundamentals, proficiency in training neural networks to solve real-world problems, and familiarity with frameworks like TensorFlow/PyTorch are considered strong assets for this role. ### [Qualcomm - AI Software Engineer, Tool (Multiple levels)](https://careers.qualcomm.com/careers?pid=446696018339&query=Quantization&location=Taipei,%20Taiwan&triggerGoButton=false&triggerGoButton=true) #### Key Responsibilities - Design, implement, optimize tools for AI model IR translation, optimization and quantization. - Deliver high-quality code to keep the tools conforming to industrial standards, the fast-evolving AI ecosystem. - Collaborate across the company, partners and customers to support the model deployment of commercial use cases and/or industrial benchmarks. #### Minimum Qualifications - Bachelor's degree in Computer Science, Software Engineering, or a related field. - Proficiency in languages like Python, C++, or Java. - Solid understanding and experience with PyTorch and TensorFlow. - Understanding of compilers or intermediate representations in software development. - Experience in developing or working with SDKs (Software Development Kits). - Strong grasp of algorithms and data structures. - Proficiency with version control systems like Git and software development tools like Gerrit and JIRA. #### Preferred Qualifications - Master's or Ph.D. in Computer Science, Artificial Intelligence, or a related field. - Hands-on experience with edge computing frameworks and technologies. - Proven experience in converting models between different formats (e.g., PyTorch/TensorFlow to proprietary IR). - Knowledge of optimizing models for deployment on resource-constrained devices. - Understanding of the internal workings of deep learning frameworks. - Familiarity with embedded systems and constraints related to them. - Experience in optimizing code and improving performance for edge devices. - Previous experience deploying models onto edge devices and integrating them into existing systems. - Ability to troubleshoot and debug complex issues related to model conversion and deployment. - Strong communication skills to collaborate with cross-functional teams and convey technical concepts effectively. Expertise in at least one of the following areas - DSP software development and algorithm implementation: Proficiency in designing and implementing algorithms for Digital Signal Processing (DSP) in software. - OpenCL programming and debugging: Experience in programming and debugging using OpenCL, particularly for parallel computing applications. - Performance profiling and optimization for parallel computing: Strong understanding and practical experience in profiling and optimizing performance for parallel computing tasks. - Image processing, computer vision, and object/face detection specifically: Expertise in image processing, computer vision techniques, and specialized knowledge in object/face detection methodologies. - Understanding compiler technology: Familiarity with ML compilers such as TVM/Glow/XLA, as well as experience in LLVM/GCC backend development, optimization analysis, and implementation is highly advantageous. - AI experience: Knowledge of Deep Learning/CNN fundamentals, proficiency in training neural networks to solve real-world problems, and familiarity with frameworks like TensorFlow/PyTorch are considered strong assets for this role. ### [NVIDIA - AI Computing Software Development Engineer, TensorRT](https://nvidia.wd5.myworkdayjobs.com/en-US/NVIDIAExternalCareerSite/job/Taiwan-Taipei/AI-Computing-Software-Development-Engineer--TensorRT_JR1970700?q=ai%20computing) #### Responsibility - Craft and develop robust inferencing software that can be scaled to multiple platforms for functionality and performance - Performance analysis, optimization and tuning - Closely follow academic developments in the field of artificial intelligence and feature update TensorRT - Provide feedback into the architecture and hardware design and development - Collaborate across the company to guide the direction of machine learning inferencing, working with software, research and product teams - Publish key results in scientific conferences #### Qualifications - Masters or higher degree in Computer Engineering, Computer Science, Applied Mathematics or related computing focused degree (or equivalent experience) - 3+ years of relevant software development experience. - Excellent C/C++ programming and software design skills, including debugging, performance analysis, and test design. - Strong curiosity about artificial intelligence, awareness of the latest developments in deep learning like LLMs, generative and recommender models - Experience working with deep learning frameworks like TensorFlow and PyTorch - Proactive and able to work without supervision - Excellent written and oral communication skills in English ### [OpenAI - Software Engineer, Triton Compiler](https://openai.com/careers/software-engineer-triton-compiler) #### About the Role As a Software Engineer, you will help build AI systems that can perform previously impossible tasks or achieve outstanding levels of performance. This requires good engineering (for example designing, implementing, and optimizing state-of-the-art AI models), writing bug-free machine learning code (surprisingly difficult!), and building the science behind the algorithms employed. In all the projects this role pursues, the ultimate goal is to push the field forward. The Research Acceleration team builds high-quality research tools and frameworks to increase research productivity across OpenAI, with the goal of accelerating progress towards AGI. For example, we develop Triton, a language and compiler for writing custom GPU kernels. The aim of Triton is to provide an open-source environment to write fast code at higher productivity than CUDA. We frequently collaborate with other teams to speed up the development of new state-of-the-art capabilities. For example, we recently collaborated with our Codegen research team on the Codex model, which can generate code in Python and many other languages. Do you love research tools, compilers, and collaborating on cutting-edge AI models? If so, this role is for you! We are looking for people who are self-directed and enjoy determining the most meaningful problem to solve in order to accelerate our research. #### Qualifications - 3+ years of relevant engineering experience - Owning problems end-to-end, with a willingness to pick up whatever knowledge is missing to get the job done - Bonus: contributions to an AI framework such as PyTorch or Tensorflow, or compilers such as GCC, LLVM, or MLIR ### [Skymizer - Software Engineer, AI Calibration](https://www.cakeresume.com/companies/skymizer-taiwan-inc/jobs/software-engineer-ai-calibration) #### Responsibility - Propose quantization strategies that can minimize the precision loss. - Deliver high-quality implementation on schedule. #### Minimum qualifications - Experience with C++ programming. - Experience with neumerical analysis. - Bachelor’s or above degree in Computer Science, Mathematic Science or related technical discipline. #### Preferred qualifications - Knowledge of computer architecture. - Knowledge of deep neural network model. - Knowledge of model compression and quantization. - Knowledge of compiler framework such as MLIR, LLVM, or GCC. ## Self Assessment ### Requirements 以下總結上述職位的要求: - Master's degree in CS, EE, or related - C++, CUDA, or OpenCL for GPU programming - Deep learning framework, e.g. PyTorch, TensorFlow - Understanding of GPU/DSP/NPU architectures - performance profiling and optimization - AI compiler, e.g. TVM, XLA - AI model compression, e.g. quantization - strong English communication skills ### Strengths - 大學修過數值分析 (numerical analysis),專題將數值分析技術應用在物理實驗的模擬: [LdG-sim](https://github.com/yutingshih/LdG-sim) - 碩班修過計算機結構 (computer architecture),作品與 precision reduction (GP32 to BF16) 相關 - Homework 1: [Exploiting Data-Level Parallelism in BFloat16 Multiplication with SWAR](https://hackmd.io/@yutingshih/Sk6QLw3Rn/%2FZ_FX2-1fTNO58VB2b1b4XQ) - Homework 2: [Approximation of logarithm of bfloat16 numbers using the RV32I instruction set](https://hackmd.io/@yutingshih/Sk6QLw3Rn/%2FH-eArydxTdCt20cXP1-RtQ) - 碩班研究方向為 deep neural network quantization - 一年以上 C++ 程式設計經驗,三年以上 C 程式設計經驗 ### Weaknesses - 大學非電資相關科系,且成績很差 - 缺乏 compiler (e.g. MLIR, LLVM, GCC) 相關經驗 - 缺乏 parallel programming (e.g. CUDA) 相關經驗 - 對 modern C++ 不熟 - 英文能力較弱 ## Mock Interview