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를 활용함으로써 얻을 수 있..
전직 미국 대통령으로부터 배우는 Leadership Principles
전직 미국 대통령으로부터 배우는 Leadership Principles
2024.10.272017년부터 소프트웨어 엔지니어로 일을 시작했으니, 벌써 만 7년 이상을 개발자로 밥 벌어 먹고살고 있는 시니어 엔지니어라고 할 수 있겠다. 마음만은 여전히 주니어 엔지니어지만 짧지 않은 시간 동안 일에 대한 요령도 많이 늘었고 체력적으로도 20대와는 달라졌으며 가장 중요한 것은 고용주인 회사가 나에게 기대하는 능력치는 이제 더 이상 하드 스킬, 즉 개발 업무에만 국한되지 않는다는 것이다. 경력이 더해지면서 회사는 피플 매니징이라는 또 다른 업무 능력치를 기대하고 있고, 다행히도 작년부터 조금씩 Entry/Junior 엔지니어에 대해서 피플 매니징을 할 수 있는 기회가 생겼다. 그리고 새로운 회계 연도가 시작되는 11월부터는 공식적으로 작은 규모의 팀을 리딩하고 매니징하는 역할이 부여될 것이라는 얘기를..
글또 10기 시작과 다짐
글또 10기 시작과 다짐
2024.10.139기의 마지막 작성글인 글또 9기 돌아보기 이후로 벌써 시간이 5개월이나 지났다. 패스권을 사용했지만, 그 외에는 빠지는 주차 없이 꾸준히 글을 작성했었고, 그게 습관으로 자리 잡아서 글또 참여와 관계없이 꾸준히 글을 작성할 수 있었으면 좋았겠지만, 출판사에서 제공받은 책의 서평 1개 외에는 한 편의 글도 작성하지 못했다. 굳이 핑계를 대자면 매년 열리는 Snapdragon Summit을 위한 준비가 여름부터 매우 바빠졌다는 점과 그냥 나라는 인간 자체가 제약이 없으면 아주 열심히 살지는 않는 것 같다 (...) 어차피 지나간 것은 지나간 것이고, 다시 10기에 참여하면서 이번에도 욕심내지 않고 우선 참여하는 동안 꾸준히 글을 작성해 보는 것을 목표로 해본다. 10기는 내 기억이 맞다면 5개월을 진행한 ..
[서평] 실무로 통하는 클린 코드
[서평] 실무로 통하는 클린 코드
2024.08.28소프트웨어 개발자라면 항상 클린 코드를 작성하고 싶어 하며, 미래의 나 또는 다른 엔지니어를 위해서 그렇게 해야 한다고 생각한다. 이런 이유에서 소프트웨어 개발자를 위한 필독서로는 Clean Code, Refactoring, Design Patterns와 같은 책들이 항상 언급되고 많은 추천을 얻는 이유라고 본다. 이미 클린 코드를 위한 책들은 시중에 많이 나와 있지만, 실무로 통하는 클린 코드는 이론적인 내용을 너무 깊게 들어가는 대신, 작은 단위로 우리가 흔히 마주할 수 있는 문제 제시 => 해결 방안 => 해결 방안에 대한 설명의 구조로 208가지 케이스 스터디에 대해서 설명하고 있다.한 가지 특이한 점은 여러 케이스에 대해서 단일 프로그래밍 언어가 아닌, 여러 가지 프로그래밍 언어를 활용해서 설명..
글또 9기 돌아보기
글또 9기 돌아보기
2024.05.12최근 일이 너무너무 바빠서 글또에는 신경을 못 쓰고 있었는데 앱 알람을 통해서 최종 제출에 대한 성윤 님의 메시지를 보고, 끝 마무리를 잘하고 쉼표를 찍어가는 의미에서 9기 활동에 관한 내용을 간단하게 정리하려고 한다.작성한 글가능하면 패스를 사용하지 않고 싶었지만, 알차게 2번을 모두 사용하여 이 글을 포함해서 최종적으로 9개의 글을 작성하였다ML Engineering 관련 글이 4개외부 API가 의도한 대로 동작을 안해요 (1) - ONNX Simplifier외부 API가 의도한 대로 동작을 안해요 (2) - contextlib 활용PyTorch의 모듈 import는 어떻게 동작하는 걸까?PyTorch 모델 프로파일링 및 성능 개선기Full Stack Optimization of Transforemr..
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를 활용하여 최소 신장 트리를 구하는 알고리즘도 그리디 알고리즘의..
[묘공단] 코딩테스트 스터디 12주차
[묘공단] 코딩테스트 스터디 12주차
2024.02.24이 글은 골든래빗 코딩 테스트 합격자 되기 파이썬 편의 15장 문제풀이입니다 15. 동적 계획법 15-1. 동적 계획법 개념 동적 계획법은 전체 문제를 한 번에 해결하는 것이 아니라, 작은 부분 문제를 해결하고, 이것을 활용하여 전체 문제를 해결하는 방법 이 때 동적계획법이 효율적이려면 다음과 같은 조건들이 필요하다 큰 문제를 작은 문제로 나누었을 때 동일한 작은 문제가 반복해서 등장해야 함 (중복 부분 문제) 큰 문제의 해결책은 작은 문제의 해결책의 합으로 구성할 수 있어야 함 (최적 부분 구조) 점화식 세우기와 동적 계획법 동적 계획법으로 문제를 해결하는 절차는 다음과 같다 문제를 해결하는 해가 이미 있다고 가정 종료 조건을 설정 과정 1, 2를 활용해 점화식을 만든다 Fact(N): # 문제를 해결..
PyTorch의 모듈 import는 어떻게 동작하는 걸까?
PyTorch의 모듈 import는 어떻게 동작하는 걸까?
2024.02.18nn.Linear(...)? 저를 포함하여 PyTorch를 사용하는 대부분은 아래처럼 필요한 torch 관련 패키지를 import 하여 사용하는 것에 아주 익숙할 것입니다 import torch from torch import nn m = nn.Linear(20, 30) input = torch.randn(128, 20) output = m(input) print(output.size()) nn 패키지에서는 Linear 뿐만 아니라 PyTorch에서 제공하는 다양한 Layer (e.g., Dropout, BatchNorm 등)과 Loss (e.g., KLD) 그리고 Container (ModuleList) 등을 사용할 수 있는데요. 어느 날 회사 업무 중 PyTorch 내부 코드 및 구조를 살펴볼 일이 ..
[묘공단] 코딩테스트 스터디 11주차
[묘공단] 코딩테스트 스터디 11주차
2024.02.07이 글은 골든래빗 코딩 테스트 합격자 되기 파이썬 편의 14장 문제풀이입니다 14. 시뮬레이션 시뮬레이션 문제 풀이 노하우 시뮬레이션 문제를 푸는 방법 성능에 중점을 둔 앞 장과 다르게, 시뮬레이션은 구현에 중점을 맞추는 유형이다 다른 알고리즘도 그렇지만 시뮬레이션 문제는 특히 아래 두 가지를 염두에 두고 문제 풀이에 접근 하나의 문제를 최대한 여러 개로 분리 예외 처리가 필요한 부분은 독립 함수로 구현 행렬 연산 지문에 꼭 행렬 내용이 없더라도, 행렬 연산을 활용해서 풀이할 수 있을 수 있으므로 몇 가지 연산들을 기억해두자 행렬 덧셈과 뺄셈, 그리고 곱셈 전치 행렬 좌표 연산 이전 장에서 했던 arr[row][col] 또는 arr[y][x] 형태로 주로 표현 이동 역시 dy, dx 같은 오프셋을 활용하..