Tech (580) 썸네일형 리스트형 [pytorch] pytorch로 구현하는 Attention이 적용된 Seq2Seq 이번 포스팅에서는 pytorch로 Attention 기법이 적용된 Sequence to Sequence 모델을 직접 구현해 보자. 그리고 구현에 앞서 (필자가..) 주로 헷갈리는 시퀀스 데이터가 모델에 들어갈 때의 입/출력 형상이 어떤 과정으로 진행되는지도 살펴보자. 1. 시퀀스 데이터는 모델의 입력으로 어떤 형태(shape)로 들어갈까? Tabular 데이터, 이미지 데이터와는 다르게 시퀀스 데이터는 시퀀스 길이(윈도우 길이)라는 게 존재한다. 그래서 시퀀스 데이터를 처음 다루는 사람에게는 시퀀스 데이터를 딥러닝 모델의 입력으로 넣어줄 때, 어떠한 형상으로 넣어주어야 하는지 또는 모델이 출력을 내뱉었을 때, 그 출력의 형상이 왜 이렇게 되는지에 대해서 헷갈릴 수 있다. 이번 목차에서는 그 헷갈리는 부분.. [강화학습] 강화학습의 기반, 마르코프 결정 과정(Markov Decision Process) 🔊 해당 포스팅은 딥러닝 파이토치 교과서 서적의 강화학습 챕터 내용을 기반으로 개인적인 학습 및 정리를 위해 작성되었습니다. 하단에 등장하는 모든 자료들은 필자가 직접 재구성하였음을 알립니다. 이번 포스팅에서는 강화학습의 개념이 무엇인지 간단히 알아보고, 강화학습의 기반이 되는 마르코프 결정 과정(이하, MDP)에 대해 알아보도록 하자. 1. 강화학습의 5요소에 대해 알아보자 먼저 강화학습이란, 어떤 환경에서 에이전트가 어떤 행동을 했을 때, 그것이 잘한 행동인지 잘못된 행동인지를 판단하고 보상(또는 벌칙)을 주는 과정을 반복해서 에이전트 스스로 학습하게 하는 분야를 의미한다. 그래서 강화학습에서는 환경을 의미하는 '환경(Environment)' 이라는 것과 '에이전트(Agent)' 라는 구성요소를 사용.. [고성능파이썬] 프로파일링으로 병목 지점 찾기 🔊 해당 포스팅은 고성능 파이썬 2판 책 서적을 읽고 개인적인 학습 목적 하에 작성된 글입니다. 포스팅에서 사용되는 자료들은 책의 내용을 참고하되 본인이 직접 재구성한 자료임을 알립니다. 이번 포스팅에서는 프로파일링을 통해 파이썬 코드의 병목 지점을 찾아보는 방법들에 대해서 배워본다. 프로파일링의 목표이자 효과는 코드의 병목 지점을 찾아 최소한의 노력으로 코드의 성능을 최대한 끌어올리는 것이다. 프로파일링 대상으로는 CPU 뿐만 아니라 측정 가능한 모든 자원이 된다. 메모리 사용량이나 네트워크 대역폭, 디스크 I/O 측정도 가능하다. 다시 말해, 시스템의 어느 부분이 느린지, 어디서 RAM을 많이 쓰는지, 디스크 I/O나 네트워크 I/O를 과도하게 발생시키는 부분이 어딘지를 확인할 수 있다. 기존 코드나.. [Git] git remote branch name conflict 를 아시나요? 이번 포스팅에서는 git 과 GitHub 이라는 remote repository 함께 사용하면서 발생할 수 있는 remote branch name conflict 이슈에 대해 알아보고, 이를 해결하는 방법에 대해 살펴보도록 하자. 1. branch name conflict 문제 이해하기 먼저 글 제목에 써있는 remote branch name conflict 이슈가 무엇인지에 대해 알아보도록 하자. 사실 이 이슈의 이름은 공식적으로 정해진 것은 아니고, 필자가 임의로 만든 이슈의 이름이다. 정확히 말하면 local branch 이름을 짓다가 발생하는 문제 중 하나이다. 사내에서든 팀 프로젝트에서든 다른 개발자 분들과 협업을 하기 위해서는 git에서 master 또는 main branch에서 작업을 하는.. [고성능파이썬] 고성능 파이썬을 어떻게 실현시킬 수 있을까? 🔊 해당 포스팅은 고성능 파이썬 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. 도커의 구조 이제부터.. 이전 1 2 3 4 5 6 ··· 29 다음