이미지에서 생성 검토

  • yolo란? 

    yolo?

    • YOLO(You Only Look Once)는 이미지 검출을 위한 딥러닝 기반의 알고리즘. YOLO는 이미지를 한 번만 보고 객체를 검출한다는 의미를 가지고 있습니다. YOLO는 이미지를 7x7 격자 형태로 나누고, 각 격자마다 객체가 있을 확률과 객체의 위치를 예측합니다. 이를 통해 이미지 내 모든 객체를 검출할 수 있습니다.
  • 왜 yolo?
    • 상품 이미지에는 많은 정보가 있으나, 이를 활용하려면 어느정도의 인식 노하우가 필요하다. 이를 ai로 대체할 수 있지 않을까?
  • 검토해야할것들
    • yolo를 적용하려면 데이터셋이 필요하다.
    • 데이터셋을 만들려면 라벨링 작업이 필요하다.
    • 라벨링 작업은 이미지 박싱? 작업이 필요하다
    • 박싱은 인력으로 한다?
    • 자동으로 할수 있는 방법을 찾아보자.
    • 자동으로는 할 수는 있을거같다.
  • 해보자
    • 로컬에 셋팅
    •  
    • 기학습된 기본 모델로 사용 시 사람/옷 검출 정도는 쉽게 가능하다. 
  • 왜 안 yolo?
    • 한 카테고리에 해당하는 목록의 이미지 1:N
    • 한 이미지에 한 카테고리에 대한 객체 검출 검사 1:1
    • 여러 이미지라면 ? N개의 카테고리에 대한 N개의 이미지 검사 N**N
    • 이미지를가진상품수 * 속성 갯수 = 연산 수 
  • 너무나 많은 연산이 들어가게 되고, 학습에 너무나 많은 자원이 소모 될듯하다.

텍스트에서 생성 검토

  • open ai fine-tuning
    • 23년8월 공개
    • 이미지는 돈이 많이 드니 일단 텍스트 위주
    • 왜냐하면 내가 낼거니깐.. $50 결제
    • (상품명+단품명+브랜드) → (속성+속성명) 1000여개 쌍 준비
  • 파인튜닝
    • 일단 davinci 모델에 맞춰 파인튜닝 .
    • 왜? prompt 구조가 간단해서 변환이 쉬워서.
    • 실수였음. 다빈치 모델은 비용이 비쌈
    • 매개변수 수 (davinci=1750B / gpt3.5=137B)
    • 하지만 gpt3.5가 저렴하고 성능도 뛰어나다. 
      •  

 

  • 테스트
    1. 파인튜닝  (20분정도 소요)
    2. playground 에서 확인 
  • 1차 후기 
    • 생각보다 퀄리티가 있음 기존 생성된 속성과 비교해도 거의 차이가 안남
    • 사람이 보고 생각할만한 수준의 속성은 만드는것으로 예상됨
    • 뒷쪽 외계어는 왜붙지?
    • 파인튜닝에는 $1.67 소모
    • 5번 정도 호출했더니(속성을생성했더니) 0.06달러 소모됨 (콜당 20원미만?)
    • 24년1월4일에 deprecated 되었다. (오늘 1월5일인데..) command로는 불가, playground에서 web ui로는 테스트 가능
    •  
  • AJ: gpt3.5를 사용해보자. 

gpt3.5

  • input 데이터를 변경해주자
 
  • prompt > completion 구조에서 messages[role/user/assistant+content] 3짝으로 된 json리스트 데이터로 변경해줘야 한다. (토큰이 길어진다)
    • 아깝다고 하나의 json에 다 넣으면 실패난다.
  •  
  •  튜닝완료 테스트
    • 15:35 시작 → 17:31 완료 / 파인튜닝에는 많은 시간이 걸렸다.
    • $48.19 :: gpt-3.5-turbo-1106 > 442KB (238>442) >> $44.97 (-$3.21)
    • 어느정도의 적합한 데이터를 추출해 낼 수 있다.
    • davinci와 달리 python code로 조회할 수 있다. → 시스템 대량 호출이 가능하게 된다.
    •  
    • 호출비용이 많이 감소했다. 5번정도 호출해도 금액변동도 없음 (10배 차이나니,2~3원정도로 예상)
  • 후기
    • 속성추출은 쓸만하다.
    • gpt3.5는 파인튜닝비용은 좀더 드나 (토큰비 상승) 호출에는 비용이 감소한다.
    • role:system 의 셋팅을 좀더 고도화 할 수 있을거 같다.
    • 만약 이걸 시스템화 한다면? 
      • 예상비용을 측정해보자 (AJ)
      • 각 카테고리별로 파인튜닝 모델이 있으면 좋을듯
    •  
    •  

'ai' 카테고리의 다른 글

LLLM을 활용한 AI 코드리뷰 셋팅하기 (with Ollama)  (1) 2024.11.29

1. LLM이란?

정의

  • LLM (Large Language Model): 대규모 언어 모델로, 대량의 텍스트 데이터를 학습하여 자연어 처리, 생성 및 분석 작업을 수행할 수 있는 모델

실사용 사례

  • 문서 요약: 법률 문서나 기술 매뉴얼을 간결하게 요약.
  • 자동 응답 시스템: 고객 서비스 봇 구현.
  • 코드 분석 및 생성: 코드 리뷰, 오류 검출, 리팩토링 제안 등.

2. 왜 Local LLM인가?

Local LLM의 정의

  • Local LLM: 로컬 환경에서 동작하는 대규모 언어 모델로, 데이터를 외부 서버로 전송하지 않고도 AI 기능을 활용할 수 있다.

Local LLM 선택 이유

  1. 보안
    • 회사의 MR(Merge Request) 검토는 보안 규칙상 외부로 데이터를 전송불가
    • 민감한 소스 데이터를 외부 서버로 전송하지 않고도 작업을 수행 가능.
  2. 비용 절감
    • API 호출 비용을 절감하고 지속 가능한 환경 구축.
  3. 커스터마이징
    • 우리 조직의 니즈에 맞춘 모델로 동작.

3. 자동 코드 리뷰의 필요성

현재 상황

  • MR(Merge Request)는 개발 생산성에 필수적.
  • 그러나 시간과 자원이 한정적이기 때문에 종종 관행적 승인으로 이어지는 경우가 있음.

자동 코드 리뷰로 가능한 작업

  1. 문법 및 구조 검토
  2. 로직 오류 탐지
  3. 리팩토링 제안 검토
  4. 피드백 생성

자동화 가능한 영역은 최소한의 기계적 코드 리뷰로 맡기고, 개발자는 핵심 작업에 집중.


4. 사용 기술 정리

Ollama란?

  • Ollama: OpenAI 출신 개발자가 만든 오픈소스 솔루션으로, 로컬 환경에서 LLM을 쉽게 설치, 실행 및 관리할 수 있도록 지원.

모델 선정 과정

한정된 스펙으로 동작가능한 모델검토 (only cpu )

  • 검토한 모델:
    1. Llama
    2. CodeLlama
    3. Qwen 2.5
  • 최종 선정 모델: Qwen 2.5 (Alibaba 개발)
    • 장점:
      • 자연어 처리 및 코드 리뷰에서 우수한 성능.
      • CPU에서도 원활히 실행 가능.
      • 빠르고 정확한 결과 제공.

5. 구조 설계 및 동작 원리

전체 구조

  1. GitLab Webhook: 이벤트 발생 시 웹서버로 요청 전송.
  2. Webserver: Webhook 요청을 수신하여 Flask로 전달.
  3. Flask: MR 데이터를 수신 및 처리 후 프롬프트 엔지니어링 과정을 거쳐 Ollama API로 전달.
  4. Ollama: 코드 리뷰 결과 생성.
  5. Slack: 리뷰 결과를 알림으로 전달.
GitLab > (Webhook) > Webserver > Flask (MR 수신) > Ollama API > Slack 알림

구조 설계 이유

  • GitLab Webhook은 기본적으로 동일 도메인에서만 동작.
  • 따라서 Webserver를 통해 Flask로 요청을 전달.
  • 프롬프트엔지니어링을 도메인 분리
  • 차후 GPU 서버를 별도로 구축하여 성능 향상을 목표로 설계.

6. 셋팅 가이드

1) GitLab Webhook 설정

  • Webhook URL: Webserver의 엔드포인트.
  • 필요한 데이터:
    • 브랜치
    • 프로젝트 정보

2) Webserver 설정

  • Webserver는 GitLab에서 전달된 데이터를 중계.
  • 필터링된 데이터를 Flask로 전달.

3) Flask 설정

  • Flask를 사용하여 MR 데이터를 처리하고 Ollama API와 통신.
  • Slack으로 결과 반환.

4) Ollama 설치 및 실행


7. 후기 및 개선점

후기

  1. 모델 최적화
    • 프롬프트 작성에 시간이 많이 소요됨.
    • 정확도와 적응성을 높이기 위해 지속적인 튜닝 필요.
  2. 리소스 한계
    • GPU 사용의 필요성을 강하게 느낌.
  3. 권한 문제
    • 방화벽, 슬랙, 서버 권한 등 여러 제약 사항.

앞으로의 계획

  • 회사 코드를 학습시켜 도메인 전문가 AI로 발전.
  • GPU 서버 환경 구축으로 성능 최적화.
  • 프롬프트 최적화를 위한 내부 가이드 제작.

8. 결론

Local LLM을 활용한 AI 코드 리뷰는 보안과 효율성을 모두 잡을 수 있는 도구. 초기 구축 및 운영에는 어려움이 있지만, 지속적인 개선과 튜닝을 통해 개발 생산성을 크게 향상시킬것을 기대해봄.

'ai' 카테고리의 다른 글

이미지에서 데이터생성 검토 202401  (1) 2024.12.31
Mockito.when(dao.get(prdNo)).thenAnswer(new Answer<Entity>() {
    @Override
    public Entity answer(InvocationOnMock invocation) throws Throwable {
        Thread.sleep(10000); // 10 seconds delay
        return new Entity();
    }
});

10초 이후에 답변을 준다. 딜레이 체크 가능

+ Recent posts