Skip to Content

LLM 애플리케이션 설정하기

LLM 애플리케이션을 실행할 EC2 인스턴스와 실행 환경을 구성해봅시다.

  1. EC2 > 인스턴스 > 인스턴스 시작 을 통해 아래와 같이 인스턴스를 생성합니다.

    • 이름: ausg-aws-2025
    • AMI: Amazon Linux 2023 AMI
    • 인스턴스 유형: t2.micro
    • 아키텍쳐: 64비트(X86) EC2 Network Setting
    • 키 페어(로그인) - 새 키 페어 생성 클릭
      • 키 페어 이름: ausg-aws-2025-key
      • 키 페어 유형: RSA
      • 프라이빗 키 파일 형식: .pem EC2 키 설정
    • 네트워크 설정
      • VPC: 기본값
      • 퍼블릭 IP 자동 할당: 활성화
      • 방화벽(보안그룹): 보안 그룹 생성
        • 보안 그룹 이름 : ausg-aws-2025-sg
        • 설명: Allows EC2 Instance Connect
        • 인바운드 보안 그룹 규칙:
          1. SSH | TCP | 22 | 사용자 지정 | com.amazonaws.us-west-2.ec2-instance-connect
          2. HTTP | TCP | 80 | 위치 무관 (혹은 인터넷에서 HTTP 트래픽 허용 체크박스 클릭)

    EC2 Network Setting EC2 Network Setting

  2. 위와 같이 설정 후 인스턴스 시작 을 클릭합니다.

  3. EC2 > 인스턴스 이동 후 생성한 인스턴스를 클릭하고 연결을 클릭합니다

    EC2 연결하기 1

  4. EC2 인스턴스 연결 탭 선택 후 다시 연결 버튼을 누릅니다.

    EC2 연결하기 1

  5. 아래 명령어를 EC2 인스턴스에서 차례대로 실행하여 프로젝트와 가상환경을 생성합니다.

    sudo su - mkdir llm-app cd llm-app python3 -m venv .venv # Python 가상환경 만들기 source .venv/bin/activate # 가상 환경 활성화 pip install langchain-core langchain-aws boto3 streamlit # 필요한 라이브러리 다운로드
  6. LLM 애플리케이션에 필요한 AWS SDK를 사용하기 위해 IAM > 역할 > 역할 생성 에서 새로운 역할을 생성합니다.

    • 1단계 신뢰할 수 있는 엔터티 선택
      • 신뢰할 수 있는 엔터티 유형: AWS 서비스
      • 사용 사례
        • 서비스 또는 사용 사례: EC2
        • 사용 사례: EC2
      • 다음 클릭

    IAM 세팅 1

    • 2단계 권한 추가
      • 추가 없이 다음 클릭
    • 3단계 이름 지정, 검토 및 생성
      • 역할 이름: EC2ApplicationRole
      • 역할 생성 클릭
  7. IAM > 역할 에서 EC2ApplicationRole 검색 후 클릭합니다. IAM 세팅 2

  8. 권한 추가 > 인라인 정책 생성을 클릭합니다

  9. JSON 클릭 후 아래의 내용을 정책 편집기에 붙여넣고 다음을 클릭합니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "bedrock:Retrieve", "bedrock:InvokeModel", "bedrock:InvokeModelWithResponseStream", "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "*" } ] }
  1. 정책 이름BedrockChatbotPolicy로 설정한 후 정책 생성을 클릭합니다.

  2. EC2 > 인스턴스 에서 ausg-aws-2025 인스턴스를 클릭한 후 작업 > 보안 > IAM 역할 수정을 클릭합니다.

    IAM setting 4

  3. IAM 역할EC2ApplicationRole로 설정한 후 IAM 역할 업데이트를 클릭합니다.

    IAM setting 5

  4. EC2 인스턴스에서 아래 명령어를 입력하여 현재 AWS API를 호출하는 주체(identity)의 정보를 확인합니다.

    aws sts get-caller-identity

    IAM setting 6

  5. LLM 애플리케이션이 사용할 환경변수 설정을 위해 config.py 파일을 아래와 같이 생성합니다.

    vi ~/llm-app/config.py
  6. 아래의 코드를 config.py에 붙여넣고 esc를 누른 후 :wq + enter를 입력하여 저장합니다.

    REGION = "us-west-2" MAX_TOKENS = 2048 # 생성할 최대 토큰 수 TEMPERATURE = 0.0 # 응답의 다양성 조절 (0-1) TOP_P = 0.01 # 누적 확률 기준 토큰 필터링 TOP_K = 250 # 다음 토큰 선택시 고려할 상위 토큰 수 MODEL_ID = "anthropic.claude-3-5-sonnet-20240620-v1:0" # Claude 3.5 Sonnet # GUARDRAIL_ID = "" # 가드레일 아이디 # GUARDRAIL_VERSION = "" # 가드레일 버전 # KB_ID = "" # 지식 기반 아이디
  7. llm-app 디렉토리에서 demo1.py파일을 아래와 같이 생성합니다.

    vi ~/llm-app/demo1.py
    # demo1.py import boto3 import streamlit as st from langchain_core.prompts import ChatPromptTemplate from langchain_aws import ChatBedrock # config.py에서 필요한 설정값들을 가져옴 from config import (REGION, MODEL_ID, MAX_TOKENS, TEMPERATURE, TOP_K, TOP_P) # 스트림릿 웹 페이지 설정 st.set_page_config(page_title='Amazon Bedrock 기반 고객상담 챗봇') # 첫 실행시 채팅 이력을 초기화하고 환영 메시지 설정 if "messages" not in st.session_state.keys(): st.session_state.messages = [{"role": "assistant", "content": "How may I assist you today?"}] # Bedrock 서비스 클라이언트 생성 bedrock_runtime = boto3.client( service_name="bedrock-runtime", region_name=REGION ) # LLM 모델의 추론 설정 model_kwargs = { "temperature": TEMPERATURE, # 응답의 다양성 조절 (0-1) "max_tokens": MAX_TOKENS, # 생성할 최대 토큰 수 "top_k": TOP_K, # 다음 토큰 선택시 고려할 상위 토큰 수 "top_p": TOP_P, # 누적 확률 기준 토큰 필터링 "stop_sequences": ["\n\nHuman"] # 응답 생성 중단 조건 } # LLM에 전달할 프롬프트 템플릿 정의 template = ''' Answer the question based on the context below. If the question cannot be answered using the information provided answer with "I don't know". Context: {context} Question: {question} ''' prompt = ChatPromptTemplate.from_template(template) # Bedrock 모델 초기화 model = ChatBedrock( client=bedrock_runtime, model_id=MODEL_ID, model_kwargs=model_kwargs ) # 사이드바 구성 with st.sidebar: st.title('Amazon Bedrock 기반 고객상담 챗봇') # 이전 대화 내용을 화면에 표시 for message in st.session_state.messages: with st.chat_message(message["role"]): st.write(message["content"]) # 사용자 입력 처리 if user_input := st.chat_input(): # 사용자 메시지 저장 및 표시 st.session_state.messages.append({"role": "user", "content": user_input}) with st.chat_message("user"): st.write(user_input) # AI 응답 생성 및 표시 with st.chat_message("assistant"): response = model.invoke(user_input) st.write(response.content) st.session_state.messages.append({"role": "assistant", "content": response.content})
    • 이전과 같이 esc + :wq + enter를 입력하여 저장합니다.
  8. 아래 명령어를 실행하여 서버를 시작합니다.

    streamlit run demo1.py --server.port 80 --server.address 0.0.0.0
  9. EC2 Instance Connet 창의 왼쪽 아래에 있는 PublicIPs를 복사합니다.

    공개 아이피 복사하기

  10. 브라우저에서 해당 IP로 접속해봅니다.

Last updated on