분류 전체보기 109

CLI 명령어가 잘못된 실행 파일을 참조하는 문제

실행 환경 OS: MacOS Python: 3.10.13 버전 pyenv: 2.3.35 버전 문제 상황 pyenv 가상환경에서 streamlit 명령어를 실행하는 상황에서 아래와 같은 에러가 발생했다. ... TypeError: Descriptors cannot not be created directly. If this call came from a _pb2.py file, your generated code is out of date and must be regenerated with protoc >= 3.19.0. If you cannot immediately regenerate your protos, some other possible workarounds are: 1. Downgrade the p..

pyenv는 어떤 방식으로 파이썬 버전을 관리할까

python 또는 pip 명령어가 실행 파일을 찾는 방법 python 또는 pip 명령어를 실행할 때, 운영 체제가 해당 명령의 실행 파일을 찾기 위해 환경변수 PATH의 값을 참조한다. /usr/local/bin:/usr/bin:/bin 환경변수 PATH는 콜론(:)으로 각 디렉토리 경로를 구분한다. 실행 파일을 찾기 위해 가장 왼쪽에 존재하는 디렉토리 경로부터 명령어에 대응하는 실행파일이 있는지 확인한다. 이 경우에는 /usr/local/bin 디렉토리에서 실행 파일을 찾고, /usr/bin, /bin 디렉토리 순서로 해당하는 실행 파일을 발견할 때까지 탐색한다. shim을 통한 명령어 가로채기 pyenv는 환경변수 PATH에 shims 디렉토리를 가장 왼쪽에 추가한다. $(pyenv root)/sh..

Backend/Python 2023.12.28

pyenv와 pyenv-virtualenv로 파이썬 버전 관리하기

프로젝트 별로 파이썬 버전을 다르게 사용해야 할 때, pyenv를 사용하여 파이썬 버전들을 쉽게 관리할 수 있다. pyenv-virtualenv는 pyenv 플러그인으로, 파이썬 가상환경을 관리해 준다. Mac OS와 Z Shell 기준으로 pyenv를 설치하고, 사용하는 방법에 대해 알아보자. pyenv 설치 $ brew install pyenv pyenv 설치 후 쉘 설정 파일(~/.zshrc) 수정해야 한다!! export PATH="$HOME/.pyenv/bin:$PATH" # pyenv가 설치되어 있다면, 현재 쉘에 대한 pyenv 초기화 스크립트를 실행 if command -v pyenv 1>/dev/null 2>&1; then eval "$(pyenv init -)" fi # pyenv-vi..

Backend/Python 2023.12.27

Spring MVC의 Front Controller 패턴과 Adapter 패턴

이번 포스팅에서는 Spring MVC에서 사용되는 디자인 패턴 중 Front Controller 패턴과 Adapter 패턴에 대해 알아보자. Front Controller 패턴 front controller는 모든 요청에 대해 공통으로 처리해야 하는 로직을 수행한 뒤, 요청에 따라 다르게 처리해야 하는 내용은 요청에 맞는 controller에게 처리를 위임한다. Spring MVC의 DispatcherServlet이 front controller의 역할을 한다. HttpServlet 클래스를 상속받은 DispatcherServlet은 모든 url 경로(”/”)에 대해 매핑된 서블릿으로 동작한다. 따라서 모든 url 경로에서 들어오는 요청을 DispatcherServlet이 가장 먼저 처리한 뒤, 요청에 ..

Backend/Spring Boot 2023.12.18

코드 분석을 통해 알아보는 스프링 MVC 동작 과정

이번 포스팅에서는 클라이언트의 HTTP 요청을 받아 컨트롤러가 요청을 처리하고, 그 결과로 HTML 응답이 반환되어 화면이 그려지는 사이에 스프링 MVC 프레임워크가 어떻게 동작하는지 코드를 분석하며 중요한 로직 위주로 알아볼 것이다. 모든 코드를 line by line으로 설명하면 글이 너무 길어지고 산만해지기 때문에 주요 흐름을 제외한 코드들을 상당 부분 생략했다. 1. 클라이언트로부터 HTTP 요청을 받아 DispatcherServlet 클래스의 doService() 메소드가 호출된 후, doService() 메소드 내부에서 doDispatch() 메소드가 호출된다. DispatcherServlet 클래스 https://github.com/spring-projects/spring-framework/..

Backend/Spring Boot 2023.10.13

[논문 리뷰] BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding (2)

실험 및 결과 GLUE (General Language Understanding Evaluation) Dataset Training Details batch size: 32 epoch: 3 learning rate: [5e-5, 4e-5, 3e-5, 2e-5] 중 Dev 데이터 셋에서 가장 성능이 좋은 것으로 선택 BERT_LARGE에서 fine-tuning을 진행할 때, 작은 데이터 셋으로 학습하는 경우 불안정한 경우가 확인되어, 몇 차례 random restart 후 Dev 데이터 셋 기준 가장 성능이 좋은 모델로 선택 Result BERT_BASE와 BERT_LARGE 모두 이전 SOTA 모델이었던 OpenAI GPT를 평균 정확도 측면에서 4.5%와 7.0% 능가하는 결과를 보여주었다. 또한, 각..

AI/논문 리뷰 2023.10.03

[논문 리뷰] BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding (1)

기존 연구 한계 ELMo의 한계 ELMo는 사전 학습된 language representation을 downstream task에 옮길 때 feature-based 방식을 사용한다. 이 방식은 task에 특화된 모델 구조가 필요하다는 특징이 있다. 또한, 토큰의 contextual representation을 단순히 left-to-right과 right-to-left representation을 concat하는 방식으로 구하는 shallow bidirectional 구조를 갖는다. 2개의 unidirectional 모델을 합쳐 하나의 shallow bidirectional 구조를 만듦으로써 (1) 비용이 2배로 증가하고, (2) Question Answering task에서 right-to-left 모델..

AI/논문 리뷰 2023.10.01

[Mojo] Mojo와 Python 모델 학습 속도 비교하기 (1)

이전 포스팅까지 Mojo의 기본적인 내용들을 살펴보았으니, 이번 포스팅에서는 본격적으로 Mojo를 활용하여 모델 학습을 진행하기 이전에 Mojo 개발 환경을 구축하는 방법과 순수 파이썬으로 실행한 학습 시간과 해당 코드를 Mojo로 그대로 가져와 실행한 학습 시간 차이를 비교해보자. 실습 환경 OS: Windows 10 GPU: NVIDIA GeForce RTX 3060 Ti Mojo 버전: v0.3.0 Python 버전: v3.10.12 Mojo 개발 환경 구축 현재 Mojo는 Windows 운영체제를 지원하지 않기 때문에 WSL을 통해 우분투 환경에서 Mojo를 실행해야 한다. Modular: AI development starts here The worlds fastest unified AI exe..

AI/기타 2023.09.30

[Mojo] 모듈과 패키지

이번 포스팅에서는 Mojo로 작성한 코드를 모듈과 패키지로 만드는 방법에 대해 알아보자. Mojo 모듈 Mojo 모듈은 다른 파일에서 import하여 사용할 수 있는 단일 소스 파일이다. 예를 들어, 아래와 같이 구조체를 정의하는 모듈을 만들 수 있다. # mymodule.mojo struct MyPair: var first: Int var second: Int fn __init__(inout self, first: Int, second: Int): self.first = first self.second = second fn dump(self): print(self.first, self.second) mymodule의 MyPair 구조체를 import하기 위해서는 아래와 같이 코드를 작성한다. # mai..

AI/기타 2023.09.24

[Mojo] Mojo 기초 문법

Mojo는 파이썬의 문법과 동적인 특징을 그대로 사용할 수 있기 때문에 파이썬 패키지에서 코드를 가져와 실행할 수 있다. 그러나 Mojo는 파이썬에 단순히 syntax sugar(코드를 읽거나 작성하기 편하도록 디자인 된 문법)를 추가한 언어가 아닌, 파이썬과 비교했을 때 시스템 프로그래밍 기능, 타입 검사, 메모리 안전성, 차세대 컴파일러 기술 측면에서 한층 발전한 언어라고 소개하고 있다. Mojo는 아직 개발이 진행중인 언어이기 때문에 아직 모든 파이썬의 기능을 지원하지는 않지만, 대부분의 기능을 지원한다. 따라서 Mojo의 문법은 파이썬의 문법과 닮은 부분이 매우 많다. 이번 포스팅에서는 파이썬과 동일한 Mojo의 문법을 제외하고, Mojo 고유의 문법에 대해서 알아보자. 이 포스트는 Mojo v0..

AI/기타 2023.09.22