■ LLAMA 3.2 11B VISION 모델을 사용해 채팅하는 방법을 보여준다.
※ meta-llama/Llama-3.2-11B-Vision-Instruct 모델을 사용하려면 허깅페이스에서 해당 모델의 사용 승인을 받아야 한다.
1. 허깅페이스 사이트에서 회원 가입을 한다.
2. 허깅페이스 사이트의 상기 모델의 페이지(https://huggingface.co/meta-llama/Llama-3.2-11B-Vision-Instruct)에서 신상 정보를 입력하고 제출해야 한다.
3. 상기 모델에 대한 사용 승인 메일이 발송된다.
※ 프로그램을 실행하려면 아래와 같이 실행한다.
1. huggingface_hub 패키지가 설치되어 있지 않다면 pip install huggingface_hub 명령을 실행한다.
2. huggingface-cli login 명령을 실행해 로그인을 한다. (한번만)
3. 아래 프로그램을 위한 패키지를 설치한다.
4. streamlit run main.py 명령을 실행한다.
※ 이미지는 저작권 문제가 있을 수 있어 필터링 처리를 했다.
▶ main.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
import streamlit as st import torch from transformers import MllamaForConditionalGeneration from transformers import AutoProcessor from PIL import Image st.set_page_config(page_title = "LLaMA Vision Chat", page_icon = "🦙") @st.cache_resource def loadModel(): modelID = "meta-llama/Llama-3.2-11B-Vision-Instruct" model = MllamaForConditionalGeneration.from_pretrained(modelID, torch_dtype = torch.bfloat16, device_map = {"" : 0}) processor = AutoProcessor.from_pretrained(modelID) return model, processor model, processor = loadModel() device = torch.device("cuda" if torch.cuda.is_available() else "cpu") st.sidebar.write(f"사용 장치 : {device}") uploadedFile = st.sidebar.file_uploader("이미지를 업로드해주시기 바랍니다.", type = ["jpg", "jpeg", "png"]) if uploadedFile is not None: imageFile = Image.open(uploadedFile) st.sidebar.image(imageFile, caption = "업로드 이미지", use_container_width = True) st.title("LLaMA Vision Chat") 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.markdown(message["content"]) if userContent := st.chat_input("메시지를 입력해 주시기 바랍니다."): if uploadedFile is None: st.error("이미지를 업로드해주시기 바랍니다.") else: st.session_state.messages.append({"role" : "user", "content" : userContent}) with st.chat_message("user"): st.markdown(userContent) with st.chat_message("assistant"): deltaGenerator = st.empty() assistantContent = "" messageList = [{"role" : "user", "content" : [{"type" : "image"}, {"type" : "text", "text" : userContent}]}] inputText = processor.apply_chat_template(messageList, add_generation_prompt = True) batchFeature = processor(imageFile, inputText, add_special_tokens = False, return_tensors = "pt").to(device) tensor = model.generate(**batchFeature, max_new_tokens = 1000) outputText = processor.decode(tensor[0], skip_special_tokens = True) markers = ["assistant\n"] for marker in markers: if marker in outputText: assistantContent = outputText.split(marker)[-1].strip() break else: assistantContent = outputText.strip() deltaGenerator.markdown(assistantContent) st.session_state.messages.append({"role" : "assistant", "content" : assistantContent}) st.sidebar.markdown("## 실행 방법") st.sidebar.code("streamlit run main.py") |
▶ requirements.txt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
accelerate==1.2.1 altair==5.5.0 attrs==24.3.0 blinker==1.9.0 cachetools==5.5.0 certifi==2024.12.14 charset-normalizer==3.4.0 click==8.1.8 colorama==0.4.6 filelock==3.13.1 fsspec==2024.2.0 gitdb==4.0.11 GitPython==3.1.43 huggingface-hub==0.27.0 idna==3.10 Jinja2==3.1.3 jsonschema==4.23.0 jsonschema-specifications==2024.10.1 markdown-it-py==3.0.0 MarkupSafe==2.1.5 mdurl==0.1.2 mpmath==1.3.0 narwhals==1.19.1 networkx==3.2.1 numpy==1.26.3 packaging==24.2 pandas==2.2.3 pillow==10.2.0 protobuf==5.29.2 psutil==6.1.1 pyarrow==18.1.0 pydeck==0.9.1 Pygments==2.18.0 python-dateutil==2.9.0.post0 pytz==2024.2 PyYAML==6.0.2 referencing==0.35.1 regex==2024.11.6 requests==2.32.3 rich==13.9.4 rpds-py==0.22.3 safetensors==0.4.5 setuptools==70.0.0 six==1.17.0 smmap==5.0.1 streamlit==1.41.1 sympy==1.13.1 tenacity==9.0.0 tokenizers==0.21.0 toml==0.10.2 torch==2.5.1+cu121 torchaudio==2.5.1+cu121 torchvision==0.20.1+cu121 tornado==6.4.2 tqdm==4.67.1 transformers==4.47.1 typing_extensions==4.12.2 tzdata==2024.2 urllib3==2.3.0 watchdog==6.0.0 |
※ 패키지 설치 순서
1. pip install torch torchvision torchaudio –index-url https://download.pytorch.org/whl/cu121 명령을 실행한다.
2. pip install streamlit transformers accelerate 명령을 실행한다.