Programming

AWS SageMaker 개발 환경 설정 on Windows 11 (feat. Anaconda)

개요

  • Anaconda 설치 (2025년 버전)
  • Windows 11에서 설치 후 딥러닝 프레임워크 까지 개발환경 설정

다운로드

image.png

  • 다음 화면에서 Download 버튼 클릭

image.png

image.png

설치파일 실행

  • 필자는 관리자 권한으로 실행하는 것을 선호함

image.png

image.png

  • 어떤 분은 Just Me 선택하기도 하지만, 필자는 All Users 선택

image.png

  • 설치 경로 확인

image.png

  • 기존에 Python이 설치가 되었더라도 Anaconda 파이썬 기준으로 테스트 할 예정이기 때문에 반드시 체크할 것
  • 확인 버튼 클릭한다.

image.png

Amazon SageMaker ML on Local Machine via VS Code

개요

  • AWS SageMaker 사용하여 ML 코드 생성
  • VS Code에서 코드 생성
  • S3 Bucket에서 모델 업로드 및 다운로드 응용하여 테스트 진행 코드

사전조건

  • SageMaker가 정상적으로 실행되려면 Docker가 필요할 수 있기, Docker를 먼저 설치하기를 바란다.

AWS & SageMaker 연결 설정

Screenshot 2025-03-09 at 4.49.34 PM.png

Connect EC2 to VSCode using AWS Toolkit (2025 march)

개요

  • Root 계정에서 사용자 그룹 만들기, I AM 정책
  • 사용자 계정에서 정책과 역할 분배하기
  • VS Code에서 AWS Toolkit 이용해서 접속하기

사전조건

  • AWS 회원가입은 완료되어 있고, 로그인이 된 상태라 가정한다.
  • VS Code에서 AWS Toolkit 설치가 되어 있다고 가정한다.

Root 계정에서 I AM 계정 만들기

사용자 생성

  • I AM 검색 후 사용자 클릭, 사용자 생성 버튼을 클릭한다.

Screenshot 2025-03-09 at 10.04.50 AM.png

  • 사용자 세부 정보에서 사용자 이름 선택
  • AWS Management Console에 대한 사용자 액세스 권한 제공 – 선택 사항
    • IAM 사용자를 생성하고 싶음
  • 콘솔 암호 지정
    • A!234567890
  • 사용자는 다음 로그인 시 새 암호를 생성해야 합니다 - 권장 체크 해제

Screenshot 2025-03-09 at 10.08.23 AM.png

AWS EC2 생성하기 (2025 march)

개요

  • EC2 프리티어 생성하기
  • 주요 개발환경 설정하기 (Ubuntu 기반)

EC2 프리티어 생성 및 연결

  • 계정 로그인 후, EC2 서비스 검색 후, EC2 클릭

Screenshot 2025-03-08 at 10.47.08 AM.png

  • 인스턴스란, “구현된 컴퓨터”라고 생각한다. 인스턴스 시작 버튼을 클릭한다.

Screenshot 2025-03-08 at 10.48.34 AM.png

  • 이제 본격적인 설계도를 하나 생성한다.
  • 필자는 lectureServer01 이라고 명명했다.

Screenshot 2025-03-08 at 11.06.39 AM.png

  • 다목적 개발이 목적이라면 Ubuntu(Linux)를 추천. 프리티어가 아닌 OS도 있으니 유의한다.

Screenshot 2025-03-08 at 11.08.18 AM.png

Python 라이브러리 설치 확인

개요

  • requirements.txt 파일에 명시된 패키지들의 설치 여부와 버전을 확인하는 코드
  • 각 패키지에 대해 현재 환경에 설치된 버전을 출력하며, 설치되지 않은 경우 메시지 표시

예시

  • requirements.txt 파일에 다음과 같은 패키지가 있다고 가정한다.
  • 또한 가상 환경에 이미 아래 라이브러리가 설치가 되어 있다고 가정한다.
polars
pandas
numpy
matplotlib
seaborn
scikit-learn
graphviz
statsmodels
jupyterlab
pyarrow
deltalake
xlsx2csv
xlsxwriter
openpyxl
xlrd
  • 먼저 설치된 라이브러리 전체 개수를 확인한다.
import pkg_resources

# 현재 환경에 설치된 모든 패키지 목록과 버전 조회
installed_packages = [f"{dist.project_name}=={dist.version}" 
                     for dist in pkg_resources.working_set]
print(len(installed_packages))

[결과]
132
  • 이번에는 각 패키지에 대해 현재 환경에 설치된 버전을 출력하며, 설치되지 않은 경우 메시지 표시한다.
import pkg_resources

# requirements.txt 파일에 명시된 패키지들의 설치 여부와 버전을 확인하는 코드
# 각 패키지에 대해 현재 환경에 설치된 버전을 출력하며, 설치되지 않은 경우 메시지 표시
packages = [
    'polars', 'pandas', 'numpy', 'matplotlib', 'seaborn', 'scikit-learn', 'graphviz', 'statsmodels', 'jupyterlab', 'pyarrow', 'deltalake', 'xlsx2csv', 'xlsxwriter', 'openpyxl', 'xlrd'
]

# 각 패키지를 순회하면서 버전 정보 확인
for package in packages:
    try:
        # pkg_resources를 사용하여 설치된 패키지의 버전 정보 조회
        version = pkg_resources.get_distribution(package).version
        print(f"{package}: {version}")
    except pkg_resources.DistributionNotFound:
        # 패키지가 설치되지 않은 경우 예외 처리
        print(f"{package}: 설치되지 않음")
        
[결과]
polars: 1.22.0
pandas: 2.2.3
numpy: 2.0.2
matplotlib: 3.9.4
seaborn: 0.13.2
scikit-learn: 1.6.1
graphviz: 0.20.3
statsmodels: 0.14.4
jupyterlab: 4.3.5
pyarrow: 19.0.0
deltalake: 0.24.0
xlsx2csv: 0.8.4
xlsxwriter: 3.2.2
openpyxl: 3.1.5
xlrd: 2.0.1

Connect to AWS via VS Code (2025 버전)

개요

  • VS Code가 설치가 되어 있다고 가정한다.
  • AWS 제품을 VS Code를 통해서 연결하도록 한다.

Prerequisites

  • VS Code requires a Windows, macOS, or Linux operating system.
  • The AWS Toolkit for Visual Studio Code requires you to work from VS Code version 1.73.0 or a later version.

AWS 회원가입

image.png

  • 이메일 인증절차 진행 후, PW 등록한다.

image.png

  • 연락처 정보를 입력한다.

image.png

  • 결제 정보를 기재한다.

image.png

LangChain with Streamlit 논문요약 예제

개요

  • LangChain의 기본 개념에 대해 살펴본다.
  • LangChain을 활용하며 간단한 웹앱을 구현한다.
  • 각 사용자가 본인의 API를 입력하면 해당 기능을 사용할 수 있도록 구현한다.

LangChain의 기본개념

  • LangChain은 대규모 언어 모델(LLM)을 활용한 애플리케이션 개발을 위한 프레임워크입니다.
  • 주요 특징과 장점은 다음과 같다.
    • 모듈성
      • 다양한 LLM과 도구들을 쉽게 통합하고 교체할 수 있다.
      • 재사용 가능한 컴포넌트를 제공한다.
    • 체이닝(Chaining)
      • 여러 컴포넌트를 연결하여 복잡한 워크플로우를 구성할 수 있다.
      • 프롬프트, LLM 호출, 출력 파싱 등을 순차적으로 처리한다
    • 메모리 관리
      • 대화 기록을 저장하고 관리할 수 있다.
      • 문맥을 유지하면서 대화형 애플리케이션을 만들 수 있다.
    • 다양한 통합
      • 여러 AI 모델(OpenAI, Anthropic 등)을 지원한다.
      • 데이터베이스, 검색 엔진 등 외부 도구와 연동이 가능하다.
    • 개발 편의성
      • 파이썬 기반의 직관적인 API를 제공한다.
      • 풍부한 문서와 예제가 제공된다.

LangChain을 활용한 프로젝트 구조 만들기

  • API 키를 입력하면 해당 기능을 사용할 수 있도록 구현한다.
  • 구현 프로세스
    • API 키 입력 화면 구현
    • 입력된 API 키를 활용한 기능 구현
    • 웹앱 레이아웃 구성
    • 사용자 친화적인 인터페이스 제공
  • PDF논문 요약 기능 구현
    • 논문 PDF 파일 업로드
    • 논문 요약 기능 구현
    • 요약 결과 표시 (각 챕터별)
  • 웹앱 레이아웃 구성
    • 사용자 친화적인 인터페이스 제공
    • 논문 요약 기능 구현
    • 요약 결과 표시
  • 먼저 테스트성으로 jupyter notebook으로 구현
    • jupyter notebook에서는 .env 파일에 있는 API 키를 불러오는 형태로 구현한다.
    • 논문은 files 폴더에 있는 논문 1개를 사용한다.

참고 논문

jupyter notebook 테스트

  • 코드는 아래와 같다.
# 필요한 라이브러리 임포트
import os
from langchain.chat_models import ChatOpenAI  # OpenAI의 ChatGPT 모델을 사용하기 위한 클래스
from langchain_core.prompts import ChatPromptTemplate  # 채팅 프롬프트 템플릿 생성을 위한 클래스
from langchain_core.output_parsers import StrOutputParser  # 출력을 문자열로 파싱하기 위한 클래스
from langchain_community.document_loaders import PyPDFLoader  # PDF 파일을 로드하기 위한 클래스
from langchain.text_splitter import RecursiveCharacterTextSplitter  # 텍스트를 청크로 분할하기 위한 클래스
from docx import Document  # Word 문서 생성을 위한 클래스
from dotenv import load_dotenv  # 환경 변수 로드를 위한 모듈
from datetime import datetime  # 날짜/시간 처리를 위한 클래스

# .env 파일에서 환경 변수 로드
load_dotenv()

# 환경 변수에서 OpenAI API 키 가져오기
openai_api_key = os.getenv("OPENAI_API_KEY")

# API 키가 존재하는지 확인
if not openai_api_key:
    raise ValueError("OPENAI_API_KEY 환경 변수를 찾을 수 없습니다. .env 파일을 확인해주세요.")

# files 디렉토리에서 PDF 파일 찾기
pdf_files = [f for f in os.listdir("files") if f.endswith('.pdf')]
if not pdf_files:
    raise ValueError("files 디렉토리에서 PDF 파일을 찾을 수 없습니다")

# 첫 번째 PDF 파일의 전체 경로 생성
pdf_path = os.path.join(os.getcwd(), "files", pdf_files[0])

# PDF 파일 로드 및 페이지 분할
loader = PyPDFLoader(pdf_path)
pages = loader.load_and_split()

# 텍스트 분할기 설정 - 큰 청크 사이즈로 설정하여 컨텍스트 유지
text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=4000,  # 각 청크의 최대 문자 수
    chunk_overlap=400,  # 청크 간 중복되는 문자 수
    length_function=len
)

# 페이지들을 청크로 분할
texts = text_splitter.split_documents(pages)

# 텍스트를 전반부와 후반부 두 개의 파트로 병합
if len(texts) > 2:
    # 전반부 텍스트 병합
    first_half = " ".join([t.page_content for t in texts[:len(texts)//2]])
    # 후반부 텍스트 병합
    second_half = " ".join([t.page_content for t in texts[len(texts)//2:]])
    texts = [
        {"content": first_half, "part": "전반부"},
        {"content": second_half, "part": "후반부"}
    ]

# LangChain의 ChatOpenAI 모델 설정
llm = ChatOpenAI(
    openai_api_key=openai_api_key,
    model="gpt-3.5-turbo",  # GPT-3.5 모델 사용
    temperature=0.1,  # 낮은 temperature로 일관된 출력 생성
    max_tokens=1000  # 충분한 길이의 요약을 위한 토큰 수 설정
)

# 요약을 위한 프롬프트 템플릿 설정
prompt = ChatPromptTemplate.from_messages([
    ("system", "당신은 전문 학술 연구원입니다. 다음 학술 논문 파트를 주요 포인트와 핵심 발견사항을 중심으로 한글로 포괄적이고 상세하게 요약해주세요."),
    ("user", "다음 텍스트를 한글로 요약해주세요. 이 텍스트는 논문의 {part}입니다:\n\n{text}\n\n반드시 한글로 요약해주시고, 영어 전문용어가 있다면 한글 설명을 덧붙여주세요.")
])

# 프롬프트, LLM, 출력 파서를 연결하는 체인 생성
chain = prompt | llm | StrOutputParser()

# Word 문서 객체 생성
doc = Document()
doc.add_heading('논문 요약', 0)

# 현재 시간을 파일명에 포함시키기 위한 형식 지정
current_time = datetime.now().strftime("%Y%m%d_%H%M%S")

# 각 파트별로 요약 실행 및 Word 문서에 추가
for i, text in enumerate(texts):
    print(f"파트 {i+1}/2 요약 중...")
    # 체인을 실행하여 요약 생성
    summary = chain.invoke({"text": text["content"], "part": text["part"]})
    
    # Word 문서에 요약 내용 추가
    doc.add_heading(f'{text["part"]} 요약', level=1)
    doc.add_paragraph(summary)
    doc.add_paragraph('-' * 40)  # 구분선 추가
    
    # 콘솔에 요약 출력
    print(f"\n{text['part']} 요약:")
    print(summary)
    print("-" * 80)

# 생성된 Word 문서를 저장
output_path = f"논문_요약_{current_time}.docx"
doc.save(output_path)
print(f"\n한글 요약본이 {output_path}에 저장되었습니다")
  • 위 코드를 실제 실행하면 다음과 같은 결과가 나온다.

Screenshot 2025-02-09 at 7.36.19 PM.png

OpenAI Whisper 사용 위한 ffmpeg 설치

개요

  • OpenAI의 Whisper 사용을 위해 필수적으로 설치해야 할 ffmpeg 설치 예제
  • 각 OS별 설치 명령어 확인
  • Windows에서 패키지 관리자가 없을 경우 설치 방법 안내

OS별 설치 명령어

# Windows (chocolatey 사용)
choco install ffmpeg

# Windows (scoop 사용)
scoop install ffmpeg

# macOS (homebrew 사용)
brew install ffmpeg

# Ubuntu/Debian
sudo apt update
sudo apt install ffmpeg

# CentOS/RHEL
sudo yum install epel-release
sudo yum install ffmpeg ffmpeg-devel

# Fedora
sudo dnf install ffmpeg ffmpeg-devel

패키지 관리자가 없을 경우

image.png

Google Colab & Jupyter Notebook에서 dotenv 사용법

개요

환경 변수를 코드 내에 직접 작성하는 것은 보안상 위험할 수 있다. 이를 방지하기 위해 .env 파일을 사용하여 환경 변수를 저장하고, dotenv 라이브러리를 활용해 이를 불러올 수 있다.

이번 글에서는 Google Colab 및 Jupyter Notebook에서 dotenv 사용법을 다룬다.


1. dotenv란?

dotenv.env 파일에 저장된 환경 변수를 쉽게 로드할 수 있도록 도와주는 라이브러리이다. 이를 활용하면 API 키, 데이터베이스 접속 정보 등을 안전하게 관리할 수 있다.

Python에서는 python-dotenv을 사용한다.


2. dotenv 설치하기

  • Jupyter Notebook 또는 Google Colab에서 설치
!pip install python-dotenv

설치가 완료되면 환경 변수를 저장할 .env 파일을 생성한다.

OS별 환경변수 설정 (Linux & macOS / Windows)

1. Linux & macOS

1.1 임시 환경변수 설정 (현재 세션에서만 유효)

export 변수명=

예)

export PATH=$PATH:/usr/local/bin
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home

위 설정은 현재 터미널 세션에서만 유효하며, 터미널을 닫으면 사라진다.

1.2 영구 환경변수 설정

(1) Bash Shell (bash 사용 시)

  • ~/.bashrc 또는 **~/.bash_profile*에 추가

    export 변수명=

    예)

    export PATH=$PATH:/usr/local/bin
    export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home
    
  • 적용:

    source ~/.bashrc   # 또는 source ~/.bash_profile
    

(2) Zsh Shell (macOS 기본 Shell)

  • ~/.zshrc 파일 수정:

    export 변수명=

    예)

    export PATH=$PATH:/usr/local/bin
    export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home
    
  • 적용: