본문 바로가기

Tech

(556)
[고성능파이썬] 고성능 파이썬을 어떻게 실현시킬 수 있을까? 🔊 해당 포스팅은 고성능 파이썬 2판 책 서적을 읽고 개인적인 학습 목적 하에 작성된 글입니다. 포스팅에서 사용되는 자료들은 책의 내용을 참고하되 본인이 직접 재구성한 자료임을 알립니다. 파이썬이라는 언어를 시작한지 어느덧 4년이 넘어가는 시기에 들어섰다. 중간에 다른 언어를 잠깐 찍먹해본 적은 있었지만 파이썬은 줄곧 손에서 놓지 않았었다. 나름대로 파이썬 실력이 많이 쌓여왔다고 생각했지만 이는 매우 건방진(?) 생각이었음을 최근에 깨닫고 있다. 그래서 파이썬에 대한 실력을 한 번 점프하는 시간을 가져야 겠다고 생각했다. 그러던 중 평소에 봐왔던 책들 중 고성능 파이썬이라는 책을 선택해서 깊게 파보기로 결정했다. 책의 목차를 보니 프로파일링하는 법, 비동기 처리, 파이썬을 컴파일하는 CPython, Cy..
[Python] decorator와 contextmanager, wraps의 사용 이번 포스팅에서는 파이썬 데코레이터에 대한 개념과 이 데코레이터와 관련된 개념들인 contextmanager, wraps의 쓰임에 대해서도 알아보도록 하자. 1. decorator란? 데코레이트는 말 그대로 '꾸미다' 라는 의미이다. 하지만 파이썬에서는 꾸미다라는 의미가 직관적이지는 않은 듯 하다. 그래서 개념 확립이 좀 필요할 듯 하다. 우선 데코레이터를 사용하는 예시 코드를 살펴보자. def decorator(func): print("decorator init") return func @decorator def add_ten(x): return x + 10 res = add_ten(100) print(res) # 출력 # decorator init # 110 decorator 라는 이름의 함수를 만들..
[Python] pyenv 와 poetry의 개념, 그리고 두 개를 함께 사용하기 오랫동안 파이썬을 사용해오면서 가상환경 관리 도구는 conda, 패키지 관리 도구는 pip 으로 사용해왔다. 사실 이 2가지를 굳이 선택한 이유는 따로 없었다. 단지 처음 파이썬을 입문하기 시작할 때 사용하던 도구가 굳혀진 것일 뿐.. 그런데 최근에 두 도구를 사용하면서 드디어(?) 불편한 점으로부터 고통을 받았다. 특히, conda의 경우는 conda 명령어로 설치할 수 있는 패키지가 매우 한정적이라는 점이여서 특히, 여러가지 파이썬 버전을 설치하는 데 제약이 많은 듯 했다. 그리고 pip은 서로 다른 패키지 간에 버전이 다름으로써 충돌이 날 수 있는 문제를 사전에 알려주지 않고, 설치한 것은 다 설치하고 잘 될거라 생각했지만 막상 코드를 실행하면 에러가 발생하는 난항을 겪었다. 그래서 이번 기회에 c..
[GenAI] 원본은 유지하되 스타일만 다르게 하기: CycleGAN, Style Transfer 🔊 해당 포스팅은 OREILLY의 '미술관에 GAN 딥러닝 실전 프로젝트' 서적을 읽고 개인적인 목적 하에 작성되는 글입니다. 포스팅에 사용되는 모든 자료는 제가 직접 재구성하였음을 알립니다. 이번 포스팅에서는 그동안 배워온 기초적인 생성 모델링 기법을 활용해서 그리기 작업을 적용해보도록 하자. 여기서 '그리기'란 원본 데이터는 유지하되 약간 스타일만 다르게 하여 가짜 데이터를 생성하는 것을 의미한다. 대표적인 예시로는 스타일 트렌스퍼 작업이 있다. 예를 들어, 피카소 그림이 원본이지만 반 고흐가 해당 그림을 그렸을 때의 새로운 그림을 생성하는 것이다. 스타일 트랜스퍼는 입력되는 이미지에 내재된 분포를 모델링하는 것이 아니라 즉, 기존에 배웠던 GAN 모델처럼 원본 이미지랑 비슷한 이미지를 생성하는 것이..
[Pytorch] 텐서를 복사하는 방법 : clone, detach 이번 포스팅에서는 최근에 Pytorch로 GAN 모델을 구현하면서 알게된 Pytorch의 clone() 메소드와 detach() 메소드에 대해 알아보려고 한다. 파이토치에서 텐서를 복사하는 메소드에는 대표적으로 clone 과 detach가 존재한다. 하지만 이 2가지 사이에는 무슨 차이점이 있을까? 또한 이 2가지 메소드를 조합해서도 사용할 수 있는데, 그러면 조합할 때와 단일하게 사용할 때 간의 차이점은 무엇일까? 우선 이 차이점을 알기 전에 파이토치의 계산 그래프와 AutoGrad 메커니즘에 대해 알아야 이해가 수월할 수 있다. 이 2개는 딥러닝 모델의 순전파, 그리고 역전파 과정을 이해하는 데 필수이다. 필자도 [밑바닥부터 시작한느 딥러닝 시리즈]를 읽으면서 계산 그래프에 대해서 deep-dive하..
[GenAI] 생성적 적대 신경망: GAN(Generative Adversarial Network), WGAN, WGAN-GP 🔊 해당 포스팅은 OREILLY의 '미술관에 GAN 딥러닝 실전 프로젝트' 서적을 읽고 개인적인 목적 하에 작성되는 글입니다. 포스팅에 사용되는 모든 자료는 제가 직접 재구성하였음을 알립니다. 이번 포스팅에서는 지난 포스팅에서 배운 AE, VAE 모델과는 다른 메커니즘으로 동작하는 생성적 적대 신경망 이른바 GAN 이라고 불리는 모델에 대해 배워보자. 그리고 GAN의 한계점을 극복하는 WGAN, WGAN-GP 모델에 대해서도 배워보자. 1. 생성자 vs 판별자 간의 대결로 만들어지는 네트워크 GAN의 'A'는 Adversarial을 의미한다. 한국말로 하면 '적대적인'을 뜻한다. 왜 적대적인 의미를 담고 있을까? GAN은 생성자(Generator)와 판별자(Discriminator) 라는 두 네트워크의 ..
[Python] Memory 관리에 대한 이해와 Garbage Collection(GC) 파이썬은 C 계열의 언어들과는 다르게 메모리 관리를 파이썬 스스로 수행해준다. 덕분에 많은 파이썬 개발자들은 어렵고 귀찮은 메모리 관리 작업을 파이썬에게 위임하고 편한 마음으로 개발을 시작한다. 하지만 파이썬의 메모리 누수를 유발하는 문법이나 방식을 남발(?)하게 되다 보면 파이썬에서도 Garbage Collection과 같은 것을 이용해 메모리 관리를 직접 해주는 것이 필요할 수 있다. 그런 최악의 시나리오에 들어가지 않기 위해서 파이썬 개발자로서 파이썬이 메모리를 어떻게 관리하는지 알고 싶었다. 그리고 내가 작성해오는 코드에는 메모리 누수가 없는지도 확인해보고 싶었다.(꽤 많을걸..) 그래서 여러 자료를 찾아보던 중 2015년 배준현님의 Pycon 발표 영상을 찾아보았고, 30분 남짓 되는 시간 동안..
[GenAI] 기본적인 생성 모델: AE 와 VAE 🔊 해당 포스팅은 OREILLY의 '미술관에 GAN 딥러닝 실전 프로젝트' 서적을 읽고 개인적인 목적 하에 작성되는 글입니다. 포스팅에 사용되는 모든 자료는 제가 직접 재구성하였음을 알립니다. 이번 포스팅에서는 생성 모델의 기본적인 구조인 AutoEncoder(AE)에 대해 알아본다. 그리고 AE의 단점을 살펴보면서 이를 극복해 해결하는 Variational AutoEncoder(VAE)에 대해서도 알아보자. 1. 잠재 공간의 특정 포인트에 매핑하는 모델: AE AE라고 불리는 AutoEncoder 모델은 사실 예전 포스팅에 소개한 적이 있다. 하지만 워낙 예전이고, 그 때 당시에는 생성형 모델 측면보다는 데이터를 복구하는 측면에서 AE에 대해배웠었다. 하지만 이번 포스팅에서는 생성형 모델 측면에서 AE..
[Kubernetes] 쿠버네티스의 리소스 관리와 설정 🔊 해당 포스팅은 시작하세요! 도커/쿠버네티스 서적을 읽고 개인적인 목적 하에 작성되는 글입니다. 포스팅에 사용되는 모든 자료는 제가 직접 재구성하였음을 알립니다. 이번 포스팅에서는 지금까지 배운 쿠버네티스의 오브젝트들인 파드, 레플리카셋, 디플로이먼트, 서비스와 같은 리소스들을 효율적으로 관리할 수 있도록 하는 것들에 대해 배워보도록 하자. 그 중에서도 이번 포스팅에서는 네임스페이스, 컨피그맵, 시크릿의 사용 방법에 대해 소개하려고 한다. 1. 리소스를 구분하는 장벽, 네임스페이스(Namespace) 이전에 배웠던 도커나 도커 스웜을 배웠을 때는 배포한 컨테이너들을 논리적으로 구분하는 방법이 없었다. 예를 들어, 100개의 도커 컨테이너를 배포한 후, docker ps -a 명령어를 사용하면 배포한 1..
[Kubernetes] 파드를 외부로 노출하기: 서비스(Service) 🔊 해당 포스팅은 시작하세요! 도커/쿠버네티스 서적을 읽고 개인적인 목적 하에 작성되는 글입니다. 포스팅에 사용되는 모든 자료는 제가 직접 재구성하였음을 알립니다. 이번 포스팅에서는 저번 포스팅에서 소개한 쿠버네티스 기초 개념에 포함되는 서비스(Service)라는 오브젝트에 대해서 알아본다. 저번 포스팅 마지막에 배운 디플로이먼트라는 오브젝트를 활용하면 동일한 역할을 하는 파드 여러개를 한 번에 생성하거나 삭제하고, 파드의 생애주기까지 관리해주는 등 손쉽게 레플리카셋(파드들의 모음)을 관리할 수 있었다. 하지만 디플로이먼트가 수행하지 못하는 것이 한 가지 있는데, 외부(외부라 함은 로컬 또는 쿠버네티스 클러스터의 외부)에서 파드로 접근이 불가능한 것이다. 이를 가능하도록 하기 위해서 서비스라는 오브젝트를..
[GenAI] 생성 모델링(Generative AI)이란 🔊 해당 포스팅은 OREILLY의 '미술관에 GAN 딥러닝 실전 프로젝트' 서적을 읽고 개인적인 목적 하에 작성되는 글입니다. 포스팅에 사용되는 모든 자료는 제가 직접 재구성하였음을 알립니다. 최근 사내 스터디에서 새롭게 다룰 주제로 생성형 모델링을 선택했다. 요즘 가장 화두인 생성형 모델링에 대해서 공부를 하기 시작해야 한다는 필요성이 생겼다. 물론 거대 기업에서 오픈소스로 나오는 생성형 모델을 가져다 쓰기만 하는 목적이라면 이 책이 그렇게 도움이 되지 않을 수 있다. 왜냐하면 이 책은 오픈소스 생성형 모델의 사용법에 대한 설명이 아니기 때문이다. 하지만 머신러닝 직무로 일하는 입장으로서, 적어도 생성형 모델이 어떤 목적성을 갖고, 또 어떠한 원리로 동작하는지는 최소한 알아야 하지 않을까 한다. 그러한..
[Kubernetes] 쿠버네티스의 기초: 팟, 레플리카셋, 디플로이먼트 🔊 해당 포스팅은 시작하세요! 도커/쿠버네티스 서적을 읽고 개인적인 목적 하에 작성되는 글입니다. 포스팅에 사용되는 모든 자료는 제가 직접 재구성하였음을 알립니다. 이번 포스팅에서는 쿠버네티스의 기초인 팟(Pods), 레플리카셋(Replica set), 디플로이먼트(Deployment) 개념에 대해 배워보도록 하자. 쿠버네티스에 대해 본격적으로 다루어보기 전에 쿠버네티스의 몇 가지 특징에 대해서 살펴보고 넘어가자. A. 쿠버네티스는 모든 리소스를 '오브젝트(Object)'로 다룬다 먼저, 쿠버네티스에서의 모든 리소스는 '오브젝트'라고 불리는 형태로 관리된다. 예를 들어, 이전에 배웠던 도커 스웜에서 제어 단위였던 '서비스'라는 것은 컨테이너들의 집합을 의미한다고 했다. 이것도 일종의 오브젝트라고 부른다...
[Kubernetes] 쿠버네티스 개념과 설치 방법 🔊 해당 포스팅은 시작하세요! 도커/쿠버네티스 서적을 읽고 개인적인 목적 하에 작성되는 글입니다. 포스팅에 사용되는 모든 자료는 제가 직접 재구성하였음을 알립니다. 이번 포스팅에서 부터는 쿠버네티스 시리즈 포스팅을 게시한다. 그 첫 챕터로, 쿠버네티스에 대한 개념에 대해 알아보고, 쿠버네티스를 설치하는 여러가지 방법에 대해 알아보자. 1. 쿠버네티스는 뭘까? 지난 시간까지 도커 시리즈 포스팅으로 도커엔진에 대해 다루는 방법부터 해서 여러 호스트의 도커를 관리하는 도커 스웜, 여처 개의 컨테이너를 한 번에 관리하는 도커 컴포즈 등에 대해 배워왔다. 그런데 이러한 개념들을 한 군데로 모아 사용할 수 있는 프로젝트가 있는데, 그것이 바로 쿠버네티스이다. 쿠버네티스는 도커 스웜 모드처럼 여러 대의 호스트의 도커..
[Docker] 여러 개의 컨테이너를 하나로 묶어 관리하자, Docker Compose 🔊 해당 포스팅은 시작하세요! 도커/쿠버네티스 서적을 읽고 개인적인 목적 하에 작성되는 글입니다. 포스팅에 사용되는 모든 자료는 제가 직접 재구성하였음을 알립니다. 이번 포스팅에서는 (이전에 얕게나마 배웠던) 여러 개의 컨테이너를 하나의 서비스로 정의하여 컨테이너 묶음으로 관리할 수 있도록 작업 환경을 제공하는 도커 컴포즈에 대해 배워보자. 1. 도커 컴포즈가 왜 필요할까? 도커 컴포즈를 본격적으로 배우기에 앞서 근본적인 질문부터 해보자. 도커 컴포즈를 배우고 사용해야 하는 이유는 무엇일까? 이유는 바로 하나의 애플리케이션 서비스는 보통 여러 개의 컨테이너 서비스들이 동시에 동작하는 것으로 구성되기 때문이다. 지금까지 우리는 일반적인 도커 엔진에서 컨테이너 단위로 제어할 때도, 도커 스웜을 배울 때도 하..
[Docker] 여러 호스트의 도커를 관리하자, Docker Swarm 🔊 해당 포스팅은 시작하세요! 도커/쿠버네티스 서적을 읽고 개인적인 목적 하에 작성되는 글입니다. 포스팅에 사용되는 모든 자료는 제가 직접 재구성하였음을 알립니다. 저번 포스팅까지는 하나의 호스트 안에서의 도커 엔진을 사용하는 방법에 대해 알아보았다. 이번 포스팅에서는 이제 여러 호스트 즉, 여러 개의 호스트 머신들 각각에 설치되어 있는 도커 엔진들을 관리하는 방법 중 하나인 도커 스웜에 대해 알아보도록 하자. 1. 왜 도커 스웜을 쓸까? 실제 프로덕션 환경에서는 하나의 호스트에 설치되어 있는 도커 엔진으로만 모든 컨테이너를 관리하지는 않는다. 이유는 생각보다 간단하다. 그 도커 엔진이 설치되어 있는 호스트 즉, 물리 머신이 갑자기 다운되거나 장애가 발생하면 그 즉시 프로덕션은 더 이상 사용자들에게 서비..
[Docker] 서버로서의 역할, Docker Daemon 🔊 해당 포스팅은 시작하세요! 도커/쿠버네티스 서적을 읽고 개인적인 목적 하에 작성되는 글입니다. 포스팅에 사용되는 모든 자료는 제가 직접 재구성하였음을 알립니다. 저번 포스팅까지는 도커 엔진을 사용하는 방법을 알아보았다. 구체적으로, 컨테이너, 이미지를 생성하고 관리하는 방법, 더 나아가 Dockerfile을 가지고 나만의 이미지를 생성하는 방법에 대해서도 학습했다. 이번 포스팅에서는 도커 자체를 다뤄볼 수 있는 도커 데몬에 대해서 알아보자. 도커 데몬에 대해 이해하고 도커 자체적으로 설정할 수 있는 여러가지 옵션을 활용하면 이미지와 컨테이너를 좀 더 쉽게 사용할 수 있게 될 것이다. 도커 데몬에 대해서 알아보기 전에 도커가 어떤 구성요소로 이루어져 있는지부터 이해해야 한다. 1. 도커의 구조 이제부터..
[Docker] 도커 이미지 다루어보기, 그리고 Dockerfile 🔊 해당 포스팅은 시작하세요! 도커/쿠버네티스 서적을 읽고 개인적인 목적 하에 작성되는 글입니다. 포스팅에 사용되는 모든 자료는 제가 직접 재구성하였음을 알립니다. 이번 포스팅에서는 도커 이미지에 대해 알아보고, 이미지를 다루어보는 방법에 대해 알아보자. 그리고 나만의 이미지를 만드는 데 활용되는 Dockerfile에 대해서도 배워보자. 참고로 Dockerfile에 대해서는 얕게나마 생활코딩 강의를 통해 배운적이 있었다. Dockerfile이 무엇인지에 대해 모른다면 간단히 이전 포스팅을 읽고 오는 것도 좋을 듯 하다. 1. 도커 이미지를 생성하자, docker commit 리눅스 배포판 중 Ubuntu는 패키지를 apt 레포지토리에서, CentOS는 패키지를 yum 레포지토리에서 설치하는 것처럼, 또 ..
[Docker] 도커 컨테이너 다루어보기 🔊 해당 포스팅은 시작하세요! 도커/쿠버네티스 서적을 읽고 개인적인 목적 하에 작성되는 글입니다. 포스팅에 사용되는 모든 자료는 제가 직접 재구성하였음을 알립니다. 이번 포스팅에서는 도커 엔진의 핵심 중 하나인 도커 컨테이너를 다루는 방법에 대해 알아보도록 하자. 1. 컨테이너 생성하기 가장 먼저 배워볼 것은 컨테이너를 생성하는 방법이다. docker run 명령어로 실행할 수 있는데, 이 명령어는 컨테이너를 생성하고 실행까지 할 수 있는 명령어이다. 명령어 형식은 아래와 같다. 공식 문서에 가면 여러가지 인자가 있긴 하지만, 여기서는 자주 쓰이며 핵심적인 명령어 인자만 알아보도록 하자. $ docker run [OPTIONS] [IMAGE] 아래와 같이 ubuntu:20.04 이미지를 활용해서 컨테이너..
[Docker] 도커란, 그리고 도커 엔진의 이미지와 컨테이너 🔊 해당 포스팅은 시작하세요! 도커/쿠버네티스 서적을 읽고 개인적인 목적 하에 작성되는 글입니다. 포스팅에 사용되는 모든 자료는 제가 직접 재구성하였음을 알립니다. 이번 포스팅을 시작으로 도커와 쿠버네티스 관련 개발 서적을 통해 본격적으로 깊이 있는 공부를 시작해보려고 한다. 도커 관련해서는 이전에 생활코딩 이고잉님의 기초 강의만 공부했었고 제대로 동작 원리와 깊이 있는 공부를 하지 못했었다. 최근 컨테이너를 기반으로 하는 인프라를 구성하는 트렌드로 가게 되면서 도커와 쿠버네티스에 대한 공부를 언젠가는 해야 한다고 생각했다. 그 첫 번째 주제로 도커란 어떤 개념인지 알아보고 도커라는 컨테이너를 생성하고 관리하는 주체이자 핵심인 도커 엔진의 이미지와 컨테이너에 대해 알아본다. 1. 가상머신과 도커 컨테이너..
[회고] 2022년을 보내며 어김없이 2022년이 지나갔다. 어느덧 회고 글도 세 번째 작성하게 되었다. 비록 23년 새해가 밝고 1개월이나 지난 2월 시점이지만, 22년엔 어떤 일이 있었고, 또 무엇을 느꼈으며, 앞으로 23년에는 어떤 일을 해나가며 살아야 할지에 대한 고민들 담아보려고 한다. 1. 커리어 작년 5월부터 정규 커리어가 시작이 되었다. 업무는 22년 1월부터 계속 해와서 그런지 작년 동안은 업무 적응에 집중해왔던 것 같다. 내가 다루는 데이터의 도메인 지식과 더불어서 회사 내의 인프라에 대한 큰 그림을 배우느라 정신이 없던 것 같았다. 업무에 어느정도 적응된 후, 중간 중간 내 커리어의 방향성에 대해서도 생각을 많이 했던 것 같다. 입사 초반에는 리서치(연구) 관련한 역량을 쌓아야 하나 해서 몇 년이 지나고 직장을 ..