주니어 엔지니어 때 알았더라면 좋았을 것들 (2)
주니어 엔지니어 때 알았더라면 좋았을 것들 (2)
2025.03.301편에 이어서 2편에서도 내가 주니어 엔지니어 때 알았더라면 좋았을 것들에 대해서 정리해 본다. 마찬가지로 이는 나의 주관적인 의견이며 누군가에게는 잘 맞지 않는 내용일 수도 있다. 모든 내용을 비판 없이 받아들이기보다는 본인 상황과 환경에 맞게 적절히 취사선택한다면 더할 나위 없을 것이다. 1. 독서조금은 뜬금없는 주제일지도 모르겠다. 2025년 기준으로 ChatGPT를 위시한 생성형 인공지능 시스템들이 즐비하며, 우리가 원하는 정보는 인터넷에서 쉽게 찾을 수 있으니 말이다. 역설적이지만 그러므로 독서의 중요성은 더 올라간다고 생각한다. 그래서 누군가가 나에게 독서가 중요하냐고 물어보면 짧은 답은 '그렇다'이다. 이때 독서의 부류는 기술 서적과 일반적인 서적 모두를 포괄한다. 하지만 이렇게 얘기하는 것..
주니어 엔지니어 때 알았더라면 좋았을 것들 (1)
주니어 엔지니어 때 알았더라면 좋았을 것들 (1)
2025.03.16대학원 석사 과정 2년이 나에게는 정말로 쉽지 않은 시간이었는데, 오히려 졸업하고 나서야 대학원생 때 알았더라면 좋았을 것들이라는 책을 보게 되었고 이걸 진작 알았더라면 하는 생각이 많이 들었었다. 소프트웨어 엔지니어로서 8년 가까이 일을 한 이제는 모든 것이 적절한 때가 있다는 얘기가 많이 공감된다. 최근에 글또 내에서 주니어 엔지니어분들과 커피챗을 할 기회가 있었는데 그들의 고민하는 부분과 이전에 모 대학교 특강에서 자주 묻는 말들로 정리한 것들이 꽤 많이 겹치는 것이 있어 이번 기회에 내가 생각하는 주니어 엔지니어 때 알았더라면 좋았을 것들을 정리해 본다. 시작하기에 앞서 글 작성자는 컴퓨터 공학을 전공했고 머신러닝 관련 석사를 했으며, 운이 좋게도 경력 시작부터 좋은 조직들을 거쳐왔기 때문에 모든..
코드트리 (Codetree) 두 달 이용 후기
코드트리 (Codetree) 두 달 이용 후기
2025.03.09코드트리 (Codetree) 한 달간 사용 후기에서 첫 한 달 이용 후기를 남긴지가 엊그제 같은데 벌써 두 달이 지났다. 추가 한 달은 기존 트레일보다는 조금 난도가 있는 내용들을 주로 살펴보고 문제 풀이를 했었는데, 특히 처음 코딩테스트를 접하는 사람들이 힘들어하는 부분인 재귀함수 관련 내용이 그림으로 자세히 설명하고, 숙달될 때까지 유사한 유형을 제공해 주는 부분이 좋았다. 특히 시중의 코딩테스트 책들이 배열이나 트리와 같은 자료구조를 먼저 얘기하고 트리나 필요한 상황이 있을 때 재귀 호출 코드를 바로 설명하는 경우가 많은데, 코드 트리의 경우 앞부분에서 함수 호출과 재귀 호출에 관한 내용을 먼저 서술하면서 자연스럽게 완전 탐색까지 이어지는 커리큘럼이 신경을 많이 썼다는 생각이 들었다.그 외에 첫 한..
Cache를 활용해서 똑똑하게 중복 로그를 방지해보자!
Cache를 활용해서 똑똑하게 중복 로그를 방지해보자!
2025.03.02배경최근 Quantization Simulation 내용이 포함된 Machine Learning Pipeline 스크립트를 작성할 일이 있었다. 비교적 최근에 AI 조직으로 합류하게 된 엔지니어의 교육용이자 Hands-on을 위한 스크립트였는데, 각 블록이 어떤 역할을 하는지 코드 레벨로 확인할 수 있게 로그를 심는 부분이 있었다. 회사 내의 업무라 정확한 내용을 얘기하기는 좀 어렵지만, 다루는 모델의 크기가 크기 때문에 모델에 대한 특정 정보를 로깅 해서 단순히 남길 때 너무 많은 로그가 생성되고 그중 많은 부분이 중복되는 정보여서 여간 신경 쓰이는 것이 아니었다. 사실 교육용 스크립트고, 읽는 사람이 약간의 귀찮음을 감수하면 큰 문제는 없었지만, 코드 리뷰 때 비슷한 질의를 다른 엔지니어들에게도 몇 ..
양자화 (Quantization)와 반올림 (Rounding)
양자화 (Quantization)와 반올림 (Rounding)
2025.02.16배경LLM을 비롯한 AI Application의 배포 타겟은 Cloud 기반에서 실행되는 서버 향도 존재하지만, 여러 장점 (개인 프라이버시, 저전력/저발열 등)을 가지고 있는 On-device도 활발히 연구/개발 중인 분야입니다. 특히 상대적으로 연산의 성능이나 메모리 제약으로 인해 On-device AI의 경우 양자화 (Quantization)을 높은 비율로 채용하게 되는데요. 양자화는 결국 정보 손실을 필연적으로 가지므로 Application의 성능 (Accuracy 등)에서 손해를 어느 정도는 감수할 수밖에 없습니다. 문제는 매번 여러 가지 양자화 실험을 한 후에 타겟 Device에 모델을 배포하고 성능을 측정하는 것이 굉장히 귀찮고 번거로운 작업일 텐데요. 따라서, 직접 하드웨어까지 배포하지 않..
코드트리 (Codetree) 한 달간 사용 후기
코드트리 (Codetree) 한 달간 사용 후기
2025.02.02개발자 커뮤니티인 글또와 제휴를 맺은 다양한 기업 및 서비스를 체험해 볼 수 있는 여러 기회가 있었는데, 나는 이번에 코딩테스트 및 자료구조/알고리즘 공부 플랫폼인 코드트리 (Codetree)에 챌린지 지원을 하여 약 한 달간 사용 후 후기를 남겨본다. 소프트웨어 엔지니어로 현재 일하고 있거나 대학생의 경우라도 구직 준비 중이라면 코딩 테스트에 대해서는 어느 정도 알고 있을 것인데, 기존에 잘 알려진 플랫폼으로는 LeetCode나 프로그래머스와 같은 서비스가 있을 것 같다. 우선 구체적인 후기를 남기기 전에 몇 가지 나의 배경 및 면책 조항을 먼저 얘기하고 시작하는 것이 좋을 것 같아서 명시하고 넘어가 본다.배경 및 면책 조항배경: 나는 17년부터 소프트웨어 엔지니어로 근무를 시작했고, 지원자로서 코딩 ..
PyTorch Custom Op to ONNX
PyTorch Custom Op to ONNX
2024.12.22앞선 포스트에서 몇 번 언급했던 것처럼 최근 머신러닝 애플리케이션은 연구자 (조직마다 다르지만 보통 Researcher, Data Scientist, Applied Scientist 등으로 표현하는 포지션)가 PyTorch 환경에서 모델 학습 및 실험으로 성능을 검증한 후 해당 모델을 배포할 환경에 따라 TFLite, ONNX 등으로 모델 변환을 하는 것이 일반적인데요. 특히 ONNX는 여러 최적화 기법을 공짜 점심으로 변환 시 제공하고 있어서 많이 활용합니다. 다만 우리가 만든 PyTorch 모델의 연산들이 항상 ONNX가 지원하는 Operator라는 보장이 없을 수 있는데요. 우선 ONNX에서 지원하는 Operator 목록은 링크를 통해 확인하실 수 있습니다목록을 한 번 살펴보시면 눈치채셨겠지만, 최..
Stable Diffusion 3 ONNX Export 트러블 슈팅
Stable Diffusion 3 ONNX Export 트러블 슈팅
2024.11.24오늘은 업무 중 발생했던 Stable Diffusion 3 모델의 ONNX Export 과정에서 발생했던 이슈와 해결 방법에 대해서 공유해보려고 합니다. Qualcomm의 하드웨어에 AI/ML 모델을 배포하기 위해서 Qualcomm® Neural Processing SDK를 활용하는데요. 해당 SDK에서 제공하는 도구 중 Converter는 여러 가지 프레임워크 (e.g., ONNX, TensorFlow, ...) 를 지원하지만, 대체로 ONNX를 많이 활용하고 있습니다. 아마도 요즘 대부분의 Researcher들이 익숙한 딥러닝 프레임워크가 PyTorch고 PyTorch에서 ONNX Export는 간편하게 지원하는 것이 첫 번째 이유일 것이라고 짐작하며, 두 번째로는 ONNX를 활용함으로써 얻을 수 있..
Full Stack Optimization of Transformer Inference: a Survey (1)
Full Stack Optimization of Transformer Inference: a Survey (1)
2024.04.14최근 회사 내부 스터디에서 진행하고 발표했던 서베이 논문에 대해서 정리하려고 합니다. 서베이 논문답게 분량이 꽤 있으므로 몇 편에 나눠서 글을 작성할 계획이며, 대체로 앞에서 다루는 Transformer 구조와 백그라운드에 대해서는 잘 알고 계시는 분들이 많으므로 상대적으로 생소한 3장 Hardware Design부터 진행합니다 (다만 요청이 있거나 생각이 바뀌면 1~2장에 대해서도 추가 작성할 계획은 있습니다). 글 작성의 기본이 되는 내은 Full Stack Optimization of Transformer Inference: a Survey ( https://arxiv.org/abs/2302.14017 )이며 일부 Figure는 다른 논문에서 가져올 수 있습니다 사내에서 이 논문이 선택된 배경은 다..
Adapter Pattern
Adapter Pattern
2024.03.31Adapter pattern? 여러분들은 어댑터라는 용어를 어디서 들어보셨나요? 저는 해외여행 시 필수품 중 하나인 110v 어댑터가 먼저 생각이 나는데요. 110v 어댑터는 우리가 한국에서 사용하는 220v에 디자인 되어있는 전자기기를 110v 단자에서도 사용할 수 있게 도와주는 중간 매개체 정도로 표현할 수 있을 것 같습니다. 소프트웨어 개발에서도 Adapter Pattern이라는 것이 존재하고, 위에서 얘기한 110v 어댑터와 비슷한 역할을 위해서 도와주는 하나의 디자인 패턴이라고 볼 수 있겠는데요. 여러 디자인 패턴과 마찬가지로 어댑터 패턴 역시 객체지향 설계의 여러 원칙을 준수하기 위해서, 그리고 코드의 재사용 및 유연성을 위해서 도입된 패턴입니다. 좀 더 자세한 내용은 아래에서 알아보겠습니다 ..
PyTorch 모델 프로파일링 및 성능 개선기
PyTorch 모델 프로파일링 및 성능 개선기
2024.03.03Motivation 저희 팀은 전사적으로 사용하는 경량화 소프트웨어를 개발하고 있습니다. 여러 도메인의 팀 (자율주행, XR, LLM 등)이 사용하다 보니 여러 가지 문의가 항상 생기는데요. 최근에 Computer Vision 모델을 경량화 소프트웨어를 이용해서 전처리 후 다시 작업을 할 때 원본 모델에서보다 너무 느리다는 문의가 들어왔습니다. 보고된 Forward pass의 수행 시간이 거의 15배 이상 차이가 났었는데요. 그 과정에 대해서 어떻게 해결할 수 있었는지 예제를 통해서 소개하려고 합니다. Profiling result 처음에는 해당 모델이 GPU로 실행되지 않고, CPU로 실행되고 있다던가 흔히 저지르기 쉬운 실수에 대해서 먼저 체크를 했었는데요. 여러 가지로 검토했을 때 그런 단순한 실수..
[묘공단] 코딩테스트 스터디 13주차
[묘공단] 코딩테스트 스터디 13주차
2024.03.02이 글은 골든래빗 코딩 테스트 합격자 되기 파이썬 편의 16장 문제풀이입니다16. 그리디 개념그리디 -> 문제 해결 과정에서 순간마다 최선의 선택을 하며 선택을 번복하지 않는 알고리즘다시 말해서 지역 최적해를 추구한다라고 말할 수 있다그리디 알고리즘이 최적해를 보장하려면최적 부분 구조 (Optimal substructure): 부분해를 푸는 과정이 최적해를 구하는 과정과 일치그리디 선택 속성 (Greddy selection property): 선택 과정이 다른 과정에 영향을 주지 않음이런 특징때문에 항상 최적해를 구할 수 있다는 보장은 못하지만, 빠르게 근사해를 제공하는 효과는 누릴 수가 있다앞에서 공부했던 Union-Find를 활용하여 최소 신장 트리를 구하는 알고리즘도 그리디 알고리즘의 일종짐을 쪼갤..