본문 바로가기
AWS/AWS Market Place로 쉽게 Solar-Mini 사용하기

AWS Market Place로 쉽게 Solar-Mini 사용하기 - 4부: Streamlit Chatbot 구현

by Pacloud 2024. 9. 24.
반응형

안녕하세요!
Solar-Mini 사용 가이드 시리즈의 마지막 파트입니다. 이번에는 boto3를 이용하여 Solar-Mini 모델을 호출하고, Streamlit으로 간단한 챗봇을 만드는 방법을 알아보겠습니다.

boto3 소개

boto3는 AWS의 공식 Python SDK로, 개발자가 Python 코드를 통해 AWS 서비스를 쉽고 효율적으로 관리할 수 있게 해 줍니다. 이 라이브러리를 사용하면 SageMaker 엔드포인트 호출, S3 버킷 관리, EC2 인스턴스 제어 등 다양한 AWS 서비스를 프로그래밍 방식으로 조작할 수 있습니다.

액세스키 발급방법

boto3를 로컬 환경에서 사용하려면 AWS 액세스 키가 필요합니다. 이 키는 AWS가 사용자를 인증하고 적절한 권한을 부여하는 데 사용됩니다. 액세스 키를 통해 로컬 환경의 Python 스크립트가 AWS 서비스와 안전하게 통신할 수 있으며, AWS 리소스에 프로그래밍 방식으로 접근할 수 있게 됩니다.

 

1. AWS 콘솔 로그인

  • 화면 우측 상단에서 계정 이름을 클릭하고, 드롭다운 메뉴에서 보안 자격 증명을 클릭합니다.

2. 액세스 키 생성

  • 액세스 키 섹션을 찾아 액세스키 만들기를 클릭합니다.

  • 경고 메시지를 확인하고 루트 액세스 키를 생성하는 것이 모범 사례는 아니지만 여전히 생성하려고 합니다.라는 체크박스를 선택한 후 액세스 키 만들기를 클릭합니다.

3. 액세스 키 확인 및 다운로드

  • 액세스 키가 성공적으로 생성되면 녹색 배너와 함께 성공 메시지가 표시됩니다.
  • .csv 파일 다운로드 버튼을 클릭하여 액세스 키 정보를 파일로 저장하고 완료를 누릅니다.
  • 비밀 액세스 키는 이 페이지를 벗어나면 다시 확인할 수 없으므로, 반드시 안전한 곳에 저장해야 합니다.

주의사항

  • 루트 사용자의 액세스 키 사용은 보안상 권장되지 않습니다. 가능하면 IAM 사용자를 생성하고 필요한 권한만 부여하여 사용하는 것이 좋습니다.
  • 액세스 키는 절대 타인과 공유하지 마세요. 키를 공유하면 타인이 여러분의 AWS 계정을 무단으로 사용하거나, 중요한 데이터에 접근하거나, 고비용의 서비스를 실행할 수 있어 보안과 재정적 위험이 큽니다.
  • 장기 사용 시에는 정기적으로 액세스 키를 교체하는 것이 좋습니다.
  • 이번 실습과 같은 단기 사용의 경우, 실습이 끝나면 액세스 키를 삭제하세요.

boto3로 간단하게 호출하는 방법

1. 로컬 컴퓨터에서 텍스트 편집기나 IDE를 열어 새 Python 파일을 생성합니다.

2. 이 파일에 아래 코드를 입력합니다.

  • 발급받은 액세스 키시크릿 키를 코드의 해당 부분에 입력하세요.
    (보안상 이 방법은 권장되지 않지만, 이번 실습은 간단하므로 예외적으로 사용했습니다.)
import json
import boto3

sagemaker_runtime = boto3.client(service_name='sagemaker-runtime', region_name='ap-northeast-2', 
                                 aws_access_key_id='YOUR_ACCESS_KEY',
                                 aws_secret_access_key='YOUR_SECRET_KEY')

endpoint_name = 'Endpoint-Solar-Mini-Chat-1'

body = json.dumps(
    {
        "messages": [
            {
                "role": "user", 
                "content": "AWS Marketplace에 대해 설명해."
            }
        ]
    }
)
response = sagemaker_runtime.invoke_endpoint(
        EndpointName=endpoint_name,
        ContentType='application/json',
        Body=body
    )
response = json.loads(response['Body'].read().decode('utf-8'))
print(response['choices'][0]['message']['content'])

3. boto3 라이브러리를 설치합니다. 터미널이나 명령 프롬프트를 열고 다음 명령어를 실행해 주세요.
(Python 환경에 따라 pip3를 사용해야 할 수도 있습니다.)

pip install boto3

4. 코드를 실행해 결과를 확인합니다.

python3 파일명.py

Streamlit 소개

Streamlit은 애플리케이션을 빠르게 만들 수 있는 Python 라이브러리입니다. 복잡한 웹 개발 지식 없이도 인터랙티브한 웹 애플리케이션을 만들 수 있으며, 간단한 파이썬 코드로 데이터 시각화, 대시보드, 머신러닝 모델의 결과를 쉽게 배포할 수 있습니다.

Streamlit Chatbot 구현

1. 생성한 Python 파일에 아래 코드를 입력합니다.

  • 발급받은 액세스 키시크릿 키를 코드의 해당 부분에 입력하세요.
import json
import boto3
import streamlit as st

sagemaker_runtime = boto3.client(service_name='sagemaker-runtime', region_name='ap-northeast-2', 
                                 aws_access_key_id='YOUR_ACCESS_KEY',
                                 aws_secret_access_key='YOUR_SECRET_KEY')

endpoint_name = 'Endpoint-Solar-Mini-Chat-1'

st.title("Solar-Mini Chatbot")

if "messages" not in st.session_state:
    st.session_state.messages = []

for message in st.session_state.messages:
    with st.chat_message(message["role"]):
        st.write(message["content"])


if prompt := st.chat_input("메시지를 입력하세요"):
    st.session_state.messages.append({"role": "user", "content": prompt})
    with st.chat_message("user"):
        st.write(prompt)

    with st.chat_message("assistant"):
        body = json.dumps(
            {
                "messages": [
                    {
                        "role": "system",
                        "content": "You are a helpful assistant."
                    },
                    {
                        "role": "user", 
                        "content": prompt
                    }
                ],
                "temperature": 0.7
            }
        )
        
        with st.spinner("답변중입니다..."):
            response = sagemaker_runtime.invoke_endpoint(EndpointName=endpoint_name,ContentType='application/json',Body=body)
            response = json.loads(response['Body'].read().decode('utf-8'))
        
        st.write(response['choices'][0]['message']['content'])
    
    st.session_state.messages.append({"role": "assistant", "content": response['choices'][0]['message']['content']})

2. streamlit 라이브러리를 설치합니다. 터미널이나 명령 프롬프트를 열고 다음 명령어를 실행해주세요.
(Python 환경에 따라 pip3를 사용해야 할 수도 있습니다.)

pip install streamlit

3. Streamlit을 실행하기 위해서는 아래 명령어를 실행해야 합니다.

streamlit run 파일명.py

4. 이 명령어를 실행하면 웹 브라우저가 자동으로 열리고, Streamlit 앱이 실행됩니다.

이 외에도 더 많은 기능을 사용해보고 싶다면, Streamlit 공식 문서를 참고하시면 됩니다. 공식 문서에서는 다양한 대화형 요소, 데이터 시각화, 사용자 입력 처리 방법 등을 자세히 설명하고 있습니다

Streamlit Docs

 

Streamlit Docs

Join the community Streamlit is more than just a way to make data apps, it's also a community of creators that share their apps and ideas and help each other make their work better. Please come join us on the community forum. We love to hear your questions

docs.streamlit.io


실습을 완료하신 후에는 불필요한 과금 방지를 위해 배포한 모델을 꼭 삭제해야 합니다. 아래 포스트를 참고해 주세요.

AWS Market Place로 쉽게 Solar-Mini 사용하기 - 정리: 엔드포인트 삭제

이것으로 Solar-Mini 사용 가이드 시리즈를 마칩니다. 이 강력한 AI 모델을 여러분의 프로젝트에 잘 활용하시기 바랍니다!