어린 아이에게 농장 동물에 대해서만 가르친 다음에, 펭귄같은 동물에 보여주면 어떻게될까?

 

 

혼란스러워 할 예측을 딥러닝 세계에서도 동일하게 반영되며, 이것을 "Closed-world Assumption"이라고 한다.

 

딥러닝도 마찬가지로 테스트셋이 훈련 데이터와 유사한 분포를 가진 데이터이면 괜찮겠지만, 실제로는 그렇기 힘들다. 훈련 데이터와 다른 분포를 가지는 real-world의 데이터로(여기서는, Out-of-distribution) OOD Detection이 등장하게 되었다.

 

 

OOD Detection을 잘 해야하는 이유로, 실제로 real-world는 방대한 양으로 인해 training 에 포함되지 않은 이상 현상이 있을 수 있고, 실제로 약을 잘 못 찾아 잘못된 치료법을 제공한다던지 집 로봇이 이상 행동을 한다든지 등을 야기할 수 있다.

그래서 OOD Detection이 중요하다.

 

 

그래서, OOD 사례를 일반화하고 이해 범위를 넘어서는 통찰력을 가지는 역할이 중요하다.

 

 

AI 모델이 OOD 데이터에 취약한 이유,

  • Model Complexity(모델 복잡성): 모델 네트워크는 매우 파라미터화 되어있고, 훈련데이터 내 복잡한 패턴에 fitting된다. 이러한 복잡성이 in-distribution 데이터에는 높은 정확도를 가지게하는 반면, OOD는 취약해진다. 모델은 OOD 입력의 분포가 훈련데이터 분포랑 다르더라도 자신있게 반응을 할 수 있는것도 문제가 될 수 있다.
  • Lack of Regularization(정규화 부족): Dropout 기법이나 Weight decay 등의 정규화 기법은 모델의 일반화 성능을 향상시킬 수 있기는 하지만, 모델은 여전히 훈련 데이터에 오버피팅된다.
  • Dataset Shift(데이터셋 변화): 실제로는 시간이 지남에 따라 데이터 분포가 언제든지 변할 수 있다.
  • Model Assumptions(모델 가정): 보통 모델들은 가정을 하게 되는데, OOD 데이터가 가정을 위반한다면 성능이 저하된다.
  • High Dimensionality(고차원): 차원의 저주(the curse of dimensionality)도 역할이 될 수 있다. 데이터가 볼륨으로 갈수록 표면 정보도 생기면 더욱 훈련 데이터에 fitting될 수 있다.
  • 등등등(거의 다 유사한 얘기)

 

OOD Detection 접근 방법,

  • Maximum Softmax Probability(최대 소프트맥스 확률값): 보통 예측을 하면 훈련 데이터에 in-distribution된 데이터는 높은 softmax probability를 가질거고, ood 데이터는 낮은 softmax probability를 갖게 될텐, 이 확률값을 기반으로 threshold로 셋팅해 일정 값 이하는 OOD 객체로 간주할 수 있다. 
  • Ensembling of Multiple Models(여러 모델의 앙상블): 한가지 모델의 예측값에 대해서 의존하지 않고 여러 모델의 예측값을 결합해서 집단적으로 결정을 내리면 더욱 OOD 데이터를 잘 식별할 수 있다.
  • Temperature Scaling(온도조정): 후처리 기법인데, 모델 결과물(softmax)를 보정(calibration)한다. "temperature" 파라미터를 조정해서 모델 예측 확률값을 수정할 수 있다. 적절하게 보정된 모델은 OOD 데이터를 더욱 정확하게 감지할 수 있다.
  • Training a Binary Classficiation Model as a Calibrator(보정 역할로 이진 분류 모델 훈련): 다른 접근법으로 보정 역할을 하는 이진 분류기를 학습하는 것이다. OOD데이터인지 in-distribution 데이터인지. 주요 모델의 output으로 이 보정 분류 모델에 넣으면, in distribution인지 OOD인지 정확히 알 수 있다.
  • Monte-Carlo Dropout(몬테까를로 드랍아웃): 일반적으로 dropout은 일반화 기법으로 흔하게 쓰이는데, 몬테까를로 dropout은 인퍼런스때와 수행하고 모델을 여러번 실행하는 방법이다. 이런 방법으로 모델의 output 분포로 모델의 불확실성을 추정하는데 이때, OOD 감지에 사용된다.

 

Furue Direction(미래 연구 방향),

  • Enhanced Generalization(향상된 일반화): 모델이 더욱 복잡해짐에 따라서, OOD 데이터에 대해서도 일반화 할 수 있는지 확인하는게 중요하다. 
  • Integration with Other AI Domains(다른 AI 도메인과의 통합): Transfer learning, few-shot learning, 등과 같이 다른 AI도메인 통합되어 더욱 강력하고 적응가능한 시스템이 되는 방향.
  • Real-time OOD Detection(실시간 OOD 감지): 자율주행이나 의학진단 등에 중요하게 사용될 것. 정확성 잃지 않되 더욱 빠르게 감지할 것
  • Ethical Considerations(윤리적 고려): 

 

 

 

refer:  https://encord.com/blog/what-is-out-of-distribution-ood-detection/

안녕하세요.

여러가지 구글링 영끌을 통해 성공한 결과를 공유 드립니다.

 

  • 모델: Yolov8-nano
  • IR 모델: 모델 경량화 수행을 위해 .onnx 변환 후 openvino 형태의 .xml 파일 양자화(int8-quantization)까지 수행한 파일

 

기존에 만들어진 가상환경에서 pyinstaller 해서 .exe 만드려고 하니까 경로가 이상하게 잡혀있는 것 때문에 같은 오류가 반복적으로 발생했어요.

 

그래서 첫 과정부터 다시 수행해주었습니다.

 

1) 가상환경생성

conda create -n "name here" python=3.8

2) Pyinstaller 설치 & 필요 라이브러리 설치

pip install pyinstaller
pip install -r requirements.txt

(필요 라이브러리는 requirements.txt 파일에 넣어두어서 한 번에 설치하기)

 

3) pyinstaller로 .spec 파일 만들기

pyinstaller main.py
  • 해당 과정이 조금 명료하지 못한 면이 있지만,
  • pyinstaller main.py를 수행하면 build, dist 폴더 2개, .spec 파일 1개 총 3개가 생성돼요.
  • 저는 .spec 파일이 필요하므로 생성된 build, dist 폴더는 다시 지워줍니다.
  • .spec는 제가 필요한 것들을 더 담아서 build할 수 있는데요!

4) .spec 파일 안에 필요한 라이브러리 추가해주기 (중요과정*****)

여기서 이제 pathex, binaries, datas 3개에 필요 바이너리 파일, 파일, 등 다 추가해줄거에요!

a = Analysis(
    ['실행파일명.py'],
    pathex=['아나콘다설치된곳\\Anaconda3\\envs\\가상환경이름\\Lib\\site-packages\\openvino\\libs'],
    binaries=[('IR모델웨이트경로\\best-gun.bin', '.'), ('다른IR모델웨이트경로\\TinyVit_320dim.bin', '.')],
    datas=[('IR모델경로\\best-gun.xml', '.'), ('아나콘다경로\\Anaconda3\\envs\\pyinstaller\\Lib\site-packages\\openvino\\inference_engine\\constants.cp38-win_amd64.pyd', '.'), ('다른IR경로\\TinyViT_320dim.xml', '.')],
    hiddenimports=[],
    hookspath=[],
    hooksconfig={},
    runtime_hooks=[],
    excludes=[],
    win_no_prefer_redirects=False,
    win_private_assemblies=False,
    cipher=block_cipher,
    noarchive=False,
)

본인의 컴퓨터에 anaconda 가상환경 어디에 설치되어있는지 확인 꼭 필요해요. 

본인 경로에 맞게 바꿔서 저와 같이 넣어주시면 돼요.

 

5) Ultralytics 폴더 추가해주기

분명 pip install -r requirements.txt 안에 ultralytics가 설치되어있는데 폴더 생성이 안되더라구요.

그래서 깃헙에서 ultralytics 다운받아서 수동으로 추가해주는 과정이 있었어요. 

ultralytics>yolo>cfg>default.yaml 파일이 없다고 자꾸 에러가 났었거든요

 

6) openvino 관련 .dll 파일 가져와주기

C:\Users\user\Anaconda3\envs\pyinstaller\Lib\site-packages\openvino\libs

본인의 아나콘다환경에 접속하면 여기 폴더로 접근이 가능해요. 여기 엄청나게 많은 openvino 관련 .dll들이 있거든요

 

할 수 있는 파일 관련된거 다 추가해줬어요.

1) openvino.dll : 대장인 것 같아서 추가

2) openvino_auto_plugin.dll : device 작성할 때 auto로도 적어서 추가

3) openvino_intel_cpu_plugin.dll: device 작성할 때 cpu 적기도 하고 기기가 intel cpu니까 추가

4) openvino_ir_frontend.dll: 지금 사용하는 .xml파일이 ir 이니까 추가

5) openvino_pytorch_frontend.dll: 코드 내부에서 pytorch 연산 있으니 일단 추가

에러가 안나게 하기 위해서 관련될만한것들 모두 .dll 추가해줬어요.

해당 파일은 dist 폴더 내에 프로젝트 폴더 내에 .exe가 들어있는 폴더 내에 붙여넣기해서 위치시켜주시면 됩니다.

 

+ 추가로 이미지파일도 추가해줘야 화면이 뜨더라구요.

저는 icon 폴더에 이미지가 다 들어있어서

datas에

추가해줬어요!

그러면 dist>프로젝트폴더>.exe 경로 내에 icon 폴더 내에 이미지파일들이 모두 들어와있는것을 확인하실 수 있습니다.

 

 

성공..!!!!

진짜 일주일 넘게 시간 투자한 것 같아요 ㅠ 흑

이제 구글링에 도가 튼 것 같은...ㅎㅎ

 

Reference page:

1) pyinstaller 만들 때 파일 추가하는거

https://www.intel.com/content/www/us/en/support/articles/000059012/software/development-software.html

 

Unable to Execute build.exe from OpenVINO™ Python* Script Using...

How to add OpenVINO dependencies to the PyInstaller command line to generate a functional .exe file from an OpenVINO python script.

www.intel.com

2) .spec 파일 다루는거(한국어)

https://4uwingnet.tistory.com/4

 

파이썬 exe 만들기, pyinstaller python

python 으로 좀 큰 프로젝트를 하시는 분들은 쉽게쉽게 exe 파일이 생성이 안되는걸 종종 경험 하셨을 겁니다. 제가 사용하는 방법은 pyinstaller 를 사용해서 여러 패키지가 포함된 프로젝트를 exe 빌

4uwingnet.tistory.com

3) .dll 파일 추가해야하는거

https://github.com/openvinotoolkit/openvino/issues/11293

 

Pyinstaller issue with Openvino 2022.1 · Issue #11293 · openvinotoolkit/openvino

System information (version) OpenVINO=> 2022.1 Operating System / Platform => Winodws 64 Bit Virtual environment => Anaconda 4.9.2 Python => 3.8.12 Installation => From PyPI (pip install openvino) ...

github.com

4) 별로 도움은 안됐지만 pyinstaller시 멀티플 파일 추가하는법 (그냥 .spec로 하는게 좋음)

https://coderslegacy.com/add-image-data-files-in-pyinstaller-exe/

 

How to add image (data) files in Pyinstaller EXE - CodersLegacy

When creating an executable using Pyinstaller, it is often necessary to include additional data files such as an image, configuration file...

coderslegacy.com

5) 에러해결했던거

https://briana-ai.tistory.com/11

 

[Error] invalid add_data_or_binary value

[ENG] Problem: i want to import .xml file to read when i run my code .exe made by pyinstaller. But, i faced this error invalid add_data_or_binary value Command i write pyinstaller --add-data "path\model.xml" main.py Command i fix pyinstaller main.py --add-

briana-ai.tistory.com

 

1. PyInstaller란

파이썬은 소스 코드 베이스라 실행 파일로 만들어줘야해요. 이때, PyInstaller를 사용하면 사용이 가능합니다.

파이썬 코드를 실행파일형태로 패키징해서 별도의 인터프리터 없이도 해당 프로그램을 실행할 수 있게 해줍니다.

 

2. 가상환경 구축하기

먼저, 가상환경을 먼저 구축하는 이유는 우리가 배포하려고 하는 가상환경에 바로 설치하면 여러 라이브러리들의 충돌이 일어납니다. 흔한 예로 Pathlib ..^_^ conda로 지우라는 에러가 나오는데 후기를 읽어보면 엄청나게 복잡한 과정이라고하네요. 그래서 그냥 step by step으로 필요한거 하나씩 설치하는 방법을 택했어요...

conda create -n pyinstaller python=3.8
conda activate pyinstaller
# (pyinstaller) 괄호바뀜
pip install pyinstaller
pip install -r requirements.txt # 본인들이 필요한 라이브러리 여기로 넣고 한 번에 설치 고고

 

3. 사용방법

pyinstaller filename.py

이렇게만 수행하면 build, dist 폴더 2개, .spec 파일 1개가 생성됩니다. 

 

4. 여러옵션

  • --onefile: 1개의 파일로 만들기
  • -w / --windowed : 콘솔창 출력 안되게 하기
  • -n: 이름 정해주기, (안정해주면 파일이름)
  • --icon=icon.ico : 아이콘 지정해주기
  • -d: 디버그모드로 만들기

 

* 주의사항

- 해보면서 느낀건데, dist랑 build 폴더내에 삭제 안하고 계속 그냥 pyinstaller filename.py 하면 바뀌는게 없어요. 어쩐지 계속 같은 가상환경에 파일이 없다~ 에러 뜨더라구요. 제대로 할거면 build랑 dist 폴더 완전삭제하고 필요패키지 설치하고 다시 pyinstaller filename.py 수행하기.

안녕하세요.

Meta에서 2023.07.18 LLaMa2를 공개합니다.

지금은 공개일로부터 약 7일이 지났네요.

이제는 일주일이면 많이 늦어진 상황이 되고 있습니다. 

세상은 정말 너무 빠르게 흘러가고 있기 때문에 놓치면 안됩니다. 

 

오늘도 간랸한 논문 리뷰 남겨보겠습니다.

 


Paper link https://ai.meta.com/research/publications/llama-2-open-foundation-and-fine-tuned-chat-models/

 


 

LLaMa1과 달리 LLaMa2 달라진 점

  • 훈련 데이터 더 public 데이터로 늘렸고
  • 파라미터 7B, 13B, 34B, 70B
  • context length 문장길이 2배 늘렸고
  • GQA: Group Q&A 가능하고
  • Tockens 1조->2조 늘었고

 

성적

이런 변화 때문인지,

발표 공개 당일 1등,

현재 일주일이 지난 지금 3등을 유지하고 있습니다.

https://huggingface.co/spaces/HuggingFaceH4/open_llm_leaderboard?ref=t4eh0.com

한국회사, upstage, 는 그 바로 아래 4등을 유지하고 있습니다.

 

1등은 stability ai 회사로 UK회사인데 유명한 stable defusion을 공개했었죠!

 

 


 

Training
  • Meta's Research Super Cluster (NVIDIA A100s)
  • GPU max 2000 - 35days (500억)
  • LLaMa2 70B - A100 80GB, 1720320h

CO2 Emission

 


Fine-tuning
  • Supervised fine-tunning
    • 다양한 소스 긁어왔지만 다양성 부족
    • SI업체 질 좋은 데이터셋 사용하니 양 적어도 훨씬 좋다.
  • Reinforcement Learning with Human Feedback
    • 폭탄 만드는 법 알려줘 같은 질문에는 답을 하지 못하도록
    • 사람의 주입 정보로 모델의 행동을 align 시키는 학습단계
    • A,B 둘다 안전하다 > A만 안전하다 > B만 안전하다 > 둘 다 안전하지않다 등 답변 가능하도록
  • System Message for Multi-Turn Consistency
    • 초기 대화 잊어먹는 문제 있어서 ghost attention(GATT) 제안
    • 첫 질문, 마지막 질문을 제외한 모든 메세지는 loss 0으로 처리, 첫 메세지 오래 유지될 수 있도록

'MLOps' 카테고리의 다른 글

Ubuntu에서 Grafana 설치하는 방법  (0) 2023.07.28

+ Recent posts