머신러닝 엔지니어의 2023년 회고
머신러닝 엔지니어의 2023년 회고
2023.12.313년만에 돌아온 회고 2020년 회고를 마지막으로 한동안 루틴처럼 하던 한 해 회고가 없었다. 이유야 다양하지만 안 하기 시작하니 1년, 2년 쌓여서 안 하게 된 것도 있고, 지나고 나서 보니 COVID-19 기간 특별히 성장하지 못한 느낌이 들어서 패배자 같다는 생각에 약간의 우울감에, 그것을 공개적으로 적기 싫어서였던 이유도 있었을 것 같다. 그러나 이젠 사회 초년생 때의 열정을 가진 나는 이미 없어져 버렸고, 조금 내려놓고 쉬어갈 수 있는 여유를 가질 수 있게 되어서 올해는 다시 회고를 작성해 본다. 가끔은 열정이 없어져 버린 내가 서글프게 느껴지지만, 하루하루 그리고 한 해 동안 나름 열심히 살았다면 무엇이 특별히 성장하지 않았어도 기록을 남기는 데 의의가 있다고 생각한다. 회사 업무 올 해가 퀄..
[묘공단] 코딩테스트 스터디 6주차
[묘공단] 코딩테스트 스터디 6주차
2023.12.30이 글은 골든래빗 코딩 테스트 합격자 되기 파이썬 편의 10장 써머리입니다 집합과 상호배타적 집합의 개념 집합은 순서와 중복이 없는 원소들을 갖는 자료구조, Python에서는 간단하게 set()을 활용할 수 있다. 상호배타적 집합은 서로 다른 두 집합 사이에 공통 원소가 없는 경우를 말함 코딩 테스트에서 상호배타적 집합을 활용하는 가장 큰 이유는 그래프 알고리즘 중 사이클을 판별하기 위해서 활용. 그 외에는 아래와 같은 응용 사례들이 존재한다 이미지 분할 도로 네트워크 구성 최소 신장 트리 알고리즘 구현 게임 개발 클러스터링 작업 집합의 연산 집합의 표현은 앞서 배운 트리의 배열 표현과 거의 유사하게 구현할 수 있고, 대표적인 연산은 합치기와 탐색 (Union-Find)가 있음. 배열의 인덱스는 자기 자..
외부 API가 의도한 대로 동작을 안 해요 (2) - contextlib 활용
외부 API가 의도한 대로 동작을 안 해요 (2) - contextlib 활용
2023.12.24문제 정의 및 현재 상황 이전 포스트에서 얘기한 것처럼 외부 API의 호출 전후로 그래프의 개형이 바뀌는 문제의 원인은 파악했는데요. 이제 그러면 우리가 원하는 동작을 하도록 코드를 수정하거나 개선을 할 차례입니다. 하고 싶은 일은 외부 API가 의존하는 onnxsim.simplify에 skipped_optimizers를 전달하는 것인데요. 자세한 내용 서술에 앞서서 전체적인 호출자 로직과 3rd Party API의 예제 구현체는 다음과 같습니다 호출자 로직 import onnx from transformers import AutoTokenizer, GPTNeoForCausalLM from third_party_api import prepare_model if __name__ == "__main__": ..
[묘공단] 코딩테스트 스터디 5주차
[묘공단] 코딩테스트 스터디 5주차
2023.12.22이 글은 골든래빗 코딩 테스트 합격자 되기 파이썬 편의 9장 써머리입니다. 트리 트리 개념 트리는 앞에서 다룬 선형 자료구조와는 다르게 계층 구조를 표현하는 용도로 많이 사용하는 자료 구조 인공지능의 의사결정트리 Trie를 활용한 자동 완성이나 검색 기능 데이터베이스에서 데이터 삽입, 삭제, 검색을 빠르게 하기 위한 용도 (B-tree 계열) 여러 가지 새로운 용어들이 많이 등장하는 데 아래와 같다 루트 노드 노드/간선 형제 노드: 동일한 부모 노드를 갖는 노드 부모/자식 노드 리프 노드: 자식이 없는 노드 높이: 루트 노드를 레벨 0으로 보고 자식 노드로 내려가면서 1씩 증가 차수: 아래로 향하는 간선의 개수 이진 트리 표현하기 이진 트리를 표현하는 방식은 크게 두 가지가 있다 배열로 표현 포인터로 표..
[묘공단] 코딩테스트 스터디 4주차
[묘공단] 코딩테스트 스터디 4주차
2023.12.15이 글은 골든래빗 코딩 테스트 합격자 되기 파이썬 편의 8장 써머리입니다. 해시의 개념과 정의 키를 통해서 빠르게 데이터 탐색을 지원하는 자료 구조를 해시라고 한다 이 때 키를 만들 때 사용하는 함수를 해시 함수라고 하며 다음과 같은 특징이 있다 해시는 단방향으로 동작 상수 시간에 바로 찾을 수 있음 값을 인덱스로 활용하려면 적절한 변환 과정 필요 위와 같은 특징 중 단방향 동작을 활용한 비밀번호 관리, 상수 시간에 바로 찾을 수 있는 특징을 활용한 데이터베이스 인덱싱 그리고 블록체인에서 활용된다 해시 함수 파이썬에서는 딕셔너리 또는 셋 자료형을 통해 상수 시간에 키 검색이 가능하므로 직접 구현할 일은 많지 않다 그러나 직접 구현한다면 여러 가지 조건들을 고려해야하는 데 해시 함수의 변환 값을 키 (인덱..
외부 API가 의도한 대로 동작을 안 해요 (1) - ONNX Simplifier
외부 API가 의도한 대로 동작을 안 해요 (1) - ONNX Simplifier
2023.12.10Motivation 올해 초부터 저희 팀은 LLM이나 Stable Diffusion과 같은 대규모 모델을 경량화하는 작업을 시작했는데요. 저희는 대규모 모델을 실제 하드웨어에 배포하기까지의 스텝 중 앞부분인 Quantization Simulation을 주로 담당하고 있었습니다. Simulation이 끝난 이후 실제 하드웨어에 배포하기 위해서는 여러 가지 추가적인 과정(Compile, Optimization, ...)이 필요한데요. 저희는 이 과정을 다른 팀이 제공하는 API를 호출하는 구조로 테스트하고 있습니다. 외부 API를 호출하고 난 결과를 테스트나 시각화했을 때 이상한 점이 발견됐는데요. Transformer 기반의 모델을, API를 호출해서 결과를 받으면 Transformer의 전형적인 구조인 ..
[묘공단] 코딩테스트 스터디 3주차
[묘공단] 코딩테스트 스터디 3주차
2023.12.08이 글은 골든래빗 코딩 테스트 합격자 되기 파이썬 편의 6, 7장 써머리입니다. 스택의 개념과 정의 먼저 들어간 것이 마지막에 나오는 LIFO (Last In, First Out 또는 후입선출) 특징을 가지는 자료형 주요 연산은 push와 pop이 있고, 그 외에 isFull, isEmpty, 그리고 최근에 삽입한 데이터의 위치인 top도 있음 문제 풀이 때는 최근에 삽입한 데이터를 대상으로 뭔가 연산해야 한다면 스택을 떠올리면 좋다 대부분 스택을 몰라서 못 푸는 것이 아니라 스택을 활용해야 한다는 생각을 못 떠올려서 풀지 못하는 경우가 많으므로 스택 관련 문제를 많이 풀어보고 스택을 사용해야 한다는 감을 익히는 것이 중요! 문제 풀이 괄호 짝 맞추기 전형적인 스택을 활용하는 문제 유형. 다만 조건에서 ..
[묘공단] 코딩테스트 스터디 2주차
[묘공단] 코딩테스트 스터디 2주차
2023.11.30이 글은 골든래빗 코딩 테스트 합격자 되기 파이썬 편의 0장 ~ 4장 써머리입니다. 배열 개념 인덱스와 값을 일대일 대응해 관리하는 자료구조 인덱스만 알면 빠르게 탐색 가능 (Random access) 배열 선언 # 1차원 배열 vector = [0] * 6 # 2차원 배열 (e.g., 3 by 4 matrix) matrix = [[0] * 3 for _ in range(4)] 배열 차원 중첩 리스트 형태로 다차원 배열을 표현 가능 그러나 실제 메모리는 1차원 구조로 저장된다 또한 2차원 배열을 1차원 배열로 표현해서 풀이하는 문제도 꽤 자주 출제됨 matrix1 = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] matrix2 = [1, 2, 3, 4, 5, 6, 7, 8, 9] # 2행 ..
[묘공단] 코딩테스트 스터디 1주차
[묘공단] 코딩테스트 스터디 1주차
2023.11.20이직을 한 이후로 면접관으로 들어가기 전 문제 검토 때가 아니면 자료구조/알고리즘 공부를 따로 하지는 않았는데, 좋은 기회로 스터디를 진행할 수 있게 되어서 대학생 때로 돌아간 것처럼 바짝 열심히 해보려고 한다. 목표는 AtCoder 청록색 레이팅인데 그동안 머리가 많이 굳어서 정말 열심히 하지 않으면 쉽지는 않을 것 같다. 그래도 공개적으로 이렇게 적어야 바로 아래 단계까지라도 가능하지 않을까, 화이팅! 이 글은 골든래빗 코딩 테스트 합격자 되기 파이썬 편의 0장 ~ 4장 써머리입니다. 0장. 코딩 테스트를 준비하기 전에 타인의 풀이를 보면 사고의 폭을 넓힐 수 있다 더 나은 시간 복잡도 풀이, 또는 언어의 문법을 잘 활용한 간결한 코드 등 비단 코딩 테스트뿐만 아니라 우리는 다른 사람의 코드를 수없이..
[서평] 스태프 엔지니어
[서평] 스태프 엔지니어
2022.11.30길벗 출판사에서 책을 제공받아 작성된 서평입니다 소프트웨어 엔지니어 커뮤니티에 왕왕 올라오는 주제 중 하나로는 매니저 (또는 관리자)가 아니라 개발을 계속하고 싶어요가 있을 것이다. 우리가 흔히 아는 개발자의 커리어 패스는 신입부터 시작해서 개발 업무를 하다가 어느 정도 연차가 쌓이면 작은 조직의 팀장을 맡게 되는 경우이다. 하지만 조직에 팀장은 여러 명이 있을 필요도 없고, 특히 관리 업무가 익숙하지 않으면 본인이 잘할 수 있는 역량인 개발에 더 집중하고 싶은 엔지니어들도 많을 것이다. 내 첫 직장인 Coupang은 Manager와 IC (Individual Contributor) 트랙이 잘 나누어져 있어서 책에서 얘기하는 커리어 패스가 쉽게 이해되었지만, 다른 회사의 경우 책에서 얘기하는 스태프 엔지..
[서평] 실전 시계열 분석
[서평] 실전 시계열 분석
2021.12.26흔히 말하는 교과서의 전형적인 그리고 다소 인위적인 데이터 (설명을 위해서 다소 비약이 들어간 형태의)가 아니라 우리가 실생활에서 접하는 데이터는 크게 볼륨의 확장과 시간에 따른 변화가 큰 특징이라고 할 수 있다. 점점 더 큰 볼륨의 데이터를 수집하고 그것을 전처리하고 최종적으로 프로덕트에 녹이는 작업은 빅데이터라는 용어를 통해서 많이 알려졌지만, 시간이 지남에 따라서 그 때는 맞았지만 지금은 틀리것과 같은 시계열 데이터 처리에 대한 관심은 상대적으로 덜했던 것 같다. 점점 더 사람들의 니즈가 변하고 비지니스가 빠르게 변하는 만큼 시계열 데이터 분석에 대한 중요성은 더 강조해도 지나침이 없고, 해당 책은 시계열 분석에 대한 어느 정도의 이론을 안다는 전제하에 실제 프로그래밍 언어로 어떻게 분석하는 지 설..
[서평] fastai와 파이토치가 만나 꽃피운 딥러닝
[서평] fastai와 파이토치가 만나 꽃피운 딥러닝
2021.09.22대부분의 딥러닝 관련 코스의 시작은 기본적인 선형대수, 확률통계 지식으로 시작해서 선형회귀, 로지스틱 회귀를 거쳐 MLP, CNN, RNN과 같은 순서로 진행하는 것이 일반적이다. 이런 바텀업 방식의 교습은 어느 정도 궤도에 오른 사람 또는 백과사전식으로 레퍼런스를 찾아볼 때는 유용하지만 소프트웨어 엔지니어가 익숙한 방식은 아니라고 생각한다. 소프트웨어 엔지니어는 코드를 이렇게 저렇게 바꿔도 보고, 코드를 일부러 동작하지 않게도 만들어가면서 동작 원리를 파악하는 접근 방식에 대체로 익숙한 경우가 많다. 이 책은 이런 소프트웨어 엔지니어들이 딥러닝 애플리케이션을 탑다운 방식으로 배울 수 있도록 구조화되어있다. 동명의 코스웍이 굉장히 유명한데 ( https://course.fast.ai/ ) 그것을 책으로 ..