하기 링크의 글을 읽고 요약함

https://arca.live/b/alpaca/153704606

 

 

1. 왜 RAG가 필요한가

  • 기본 LLM(예: GPT, Gemini, Grok)은 자기 가중치(머릿속 지식) 만으로 답을 만들어서
    • 환각(Hallucination)이 발생하기 쉽고
    • 학습 시점 이후의 최신 정보를 모른다는 한계가 있음.
  • 마치 법전·판례 없이 기억만으로 상담하는 변호사와 같아서, 복잡한 질문에는 오답 가능성이 급증함.
  • 이를 보완하기 위해 “AI도 변호사처럼 검색·자료참조를 하게 하자”는 발상에서 RAG가 등장.

2. RAG(Retrieval-Augmented Generation)의 역할

  • 구조:
    1. 사용자의 질문을 받으면
    2. 먼저 검색 모듈(벡터DB 등) 로 관련 문서·데이터를 찾고
    3. 그 자료들을 질문과 함께 LLM에 넣어
    4. LLM이 이를 기반으로 답변을 생성하게 함.
  • 즉, LLM은 생성(Generation) 에만 집중하고, Retrieval(검색) 은 별도 모듈이 담당하는 구조.
  • 효과:
    • 최신 정보 반영 가능
    • 출처·근거를 제시할 수 있음
    • 환각이 눈에 띄게 감소
    • 인터넷 전체가 아니라 회사 내부 DB만 검색하도록 설정해 B2B/엔터프라이즈 활용이 가능
    • “모델 다시 학습” 없이도 Low risk, High return 으로 품질 개선 가능.

3. LoRA / QLoRA의 등장 배경과 핵심 아이디어

  • RAG는 “무슨 내용을 말할지(지식)” 는 개선하지만, 모델의 성격·말투·전문성(행동, 스타일) 은 바꾸지 못함.
    → 이를 바꾸려면 원래는 Full Fine-tuning(전체 뇌수술) 이 필요했는데, 이는 GPU·시간·비용이 너무 큼.
  • LoRA:
    • 거대한 모델 전체를 다시 학습시키지 않고,
    •  기존 모델은 그대로 얼려두고(Freeze)
    •  그 위에 작은 어댑터(보조 장치) 만 학습.
    • 이 어댑터 파라미터는 작아서 파일 크기·훈련비용이 매우 작고, 성능은 풀 파인튜닝에 근접.
    • 단점: 여전히 VRAM(GPU 메모리) 사용량이 크다.
  • QLoRA:
    • 여기서 한 단계 더 나아가, 원본 모델을 양자화(예: 16bit → 4bit) 해서 메모리 점유를 극단적으로 줄임.
    • 결과적으로 일반 게이머용 GPU 에서도 LoRA 기반 파인튜닝이 가능해져
      → AI 파인튜닝의 비용·진입장벽을 크게 낮춤(민주화).

4. RAG(지식) + QLoRA(행동/전문성)의 조합

  • 비유:
    • QLoRA/LoRA: 변호사를 특정 분야 전문 + 특정 말투 로 훈련시키는 과정
      • 예: “특허법 전문 변호사 + 근엄한 대법관 말투”로 만드는 것(모델의 행동/전문성 변경).
    • RAG: 이렇게 훈련된 변호사에게
      • 최신 법전·판례·오늘자 서류를 계속 쥐여주는 역할(실시간 지식 공급).
  • 결과:
    • 전문화된 태도·스타일 을 가진 AI가
    • 최신·실제 데이터 를 근거로 답변을 생성.
    • 둘 중 하나만으로는 불가능한, 고품질·실무형 AI 가 완성됨.

5. 비즈니스 관점에서의 임팩트

  • 기업은 이제 단순히 “남이 만든 AI를 쓰는 것”을 넘어서,
    • (QLoRA/LoRA로) 자사 용어·규칙·코딩 스타일에 맞춘 전용 AI 를 만들고
    • (RAG로) 그 AI에게 사내 코드베이스, 문서, DB 전체 를 붙여 실무를 맡길 수 있음.
  • 정리하면,
    • RAG = 지식·데이터 측면 강화 (무엇을 말할지)
    • LoRA/QLoRA = 행동·전문성·스타일 강화 (어떻게 말할지)
      → 이 조합이 현재 기업용·산업용 AI 전략의 핵심 축이 됨.

 

 

반응형

Vs code (Visual Studio Code)가 아래와 같이

- 갑자기 실행되지 않거나 (프로그램 위치를 찾을 수 없다..)

- 설치된 디렉토리에서 삭제된 경우

가 있다.

보통 자동 업데이트 후 발생한다.

 

이 문제를 해결하는 방법은 세 가지가 있다.

 

1. 자동 업데이트 설정 변경

File 메뉴에서 설정을 아래와 같이 변경한다. 

    - File - Preperences - Setting - Application - Update - Enable Windows Background Updates - disable
    - File - Preperences - Setting - Application - Update - mode - manual

 

2. 비설치형 파일 다운로드

VS code는 비설치형 파일을 압축 파일(zip) 형태로 제공한다. 해당 파일을 다운로드한 후 압축 해제 후 사용한다.

 

3. 백업 파일과 폴더 복원

VS code가 설치된 디렉토리에 가면 under bar( "_폴더명" ) 로 시작되는 폴더에 백업(backup)되어 있다.

내용을 복사해서 복원이 가능하다.

 

반응형

UUID 개요

UUID는 Universally Unique IDentifier의 약자로 말 그대로 범용 고유 식별자(일련 번호)라고 해석이 가능하다.

탄생 배경은 RFC 4122 에서 명시된 규약으로 네트워크 상에서 유일성(고유성)을 보장하는 식별자(ID)를 생성하기 위한 규약이다. 즉, UUID 규약을 통해 생성한 식별자(ID)는 중복되지 않는다고 생각하면 된다. (중복될 확률이 0에 가까움)

※ RFC(Request for Comments) : IFTF(국제 인터넷 표준화 기구, Internet Engineering Task Force)에서 제공하는 문서

 

UUID 형식

UUID는 128bit 숫자로 구성되며 보통 8, 4, 4, 12자리로 구성된 32자리 16진수로 표현하며 하이픈(-)을 써서 구분한다.

time_low time_mid time_hi_and_version clock_seq_hi_and_resclock_seq_low node
8 4 4 4 12

 

예) f91877b8-388e-4557-9951-f1d90d8e8e0b

 

UUID 각 부위별 내용

명칭 저장 크기
(byte)
표현 길이
(16진수)
의미 (Wiki 제공)
time_low 4 8 integer giving the low 32 bits of the time
시간의 low 32 bit를 부여하는 정수
time_mid 2 4 integer giving the middle 16 bits of the time
시간의 middle 16 bit를 부여하는 정수
time_hi_and_version 2 4 4-bit “version” in the most significant bits, followed by the high 12 bits of the time
최상위 bit에서 4 bit의 "version" 그리고 시간의 high 12 bit
clock_seq_hi_and_resclock_seq_low 2 4 1 to 3-bit “variant” in the most significant bits, followed by the 13 to 15-bit clock sequence
최상위 bit에서 1~3 bit는 UUID의 레이아웃 형식, 그리고 13~15 bit는 clock sequence
node 5 12 the 48-bit node id
48 bit 노드 id

 

python에서 uuid 생성 방법

아주 간단하다.

 

import uuid

# 랜덤 UUID 생성
v_uuid = uuid.uuid4()
print( v_uuid  )

 

여러가지 uuid 생성 방법
좀 더 구체적으로 하기와 같이 쓸 수 있다.

 

import uuid

 

# 1. 호스트 ID, sequence, 현재 시간을 기준으로 uuid 생성

print(uuid.uuid1())

 

#  2a. uuid1 규칙을 이용하되, 현 시스템의 MAC 주소(get_mac_address)를 추가해서 보다 강한 중복 방지를 부여함

unique_id = uuid.uuid1(node=get_mac_address())

 

#  2b. namespace uuid와 name에 대한 MD5 hash에서 uuid 생성, name은 아무 값이나 상관없으나 보통 url 주소(www.sample.com 과 같은)를 사용

print(uuid.uuid3(uuid.NAMESPACE_URL, name))

 

#  3. 램덤한 uuid 생성

print(uuid.uuid4())

 

#  4 namespace uuid와 name에 대한 SHA-1 hash에서 uuid 생성 , name은 아무 값이나 상관없으나 보통 url 주소(www.sample.com 과 같은)를 사용

print(uuid.uuid5(uuid.NAMESPACE_URL, url))

 

특이 사항

생성된 uuid는 uuid 객체 이므로 그대로 사용하면 

UUID('022dfbec-7a09-4f9a-98e7-ab35254a401f')

처럼 UUID( '문자열' ) 형식으로 저장된다.

 

따라서 

uuid_str = str( uuid.uuid4())

로 변환하여 사용하는 것이 필요하다.

 

예제)

a = uuid.uuid4()   ; print(a)

print문이 내부 변환(즉 class 내 toString()을 호출..)하여 d227f781-3a25-40b2-929d-4a48922effee 로 출력

 

b = [a]                  ; print(b)

→  [UUID('d227f781-3a25-40b2-929d-4a48922effee')] 처럼 uuid 객체 형태를 출력

 

c = str(a)              ; print(c)

  문자열 d227f781-3a25-40b2-929d-4a48922effee 출력

 

반응형

'programming > Python' 카테고리의 다른 글

os.walk - 하위 디렉토리 포함 모든 파일 탐색  (0) 2025.04.10
venv 가상환경  (0) 2024.08.21
파이썬 패턴  (0) 2024.06.12
파일, 디렉토리 관리  (0) 2024.06.12
DataFrame, Column name 변경  (0) 2020.09.06

안쓰는 docker container를 삭제한다. 다만, 일시적으로 안쓰던 것도 삭제될 수 있다.

$ docker container prune

 

일정 시간 사용하지 않은 docker container를 삭제한다.

$ docker container prune --filter "until=2400h"

2400h : 사용한지 100일(24h x 100) 이상 지난 docker container를 모두 삭제한다.

 

이후 아래를 추가로 해주는 것도 좋다.

container와 연결이 없는 image를 삭제한다.

$ docker image prune -a

 

반응형

 

os.walk( dir )는 주어진 디렉토리( dir  ) 내의 모든 하위 디렉토리와 파일을 재귀적으로 탐색한다. 

os.listdir()가 주어진 디렉토리 내 정보만 가져오는 것과 대비된다.

 

os.walk 사용법

for (root, dirs, files) in os.walk(path_dir):  # path_dir : 탐색할 루트 폴더
    print("# root : " + root)  # 현재 폴더의 전체 경로

    if len(dirs) > 0:
        for dir_name in dirs:  # '현재' 폴더에 포함된 하위 디렉토리 명단.
            print("dir: " + dir_name)

    if len(files) > 0:  # 디렉토리가 아닌, '현재' 폴더에 포함된 파일 명단.
        for file_name in files:
            print("file: " + file_name)

 

 

반응형

'programming > Python' 카테고리의 다른 글

고유 식별자(unique id) 생성  (0) 2025.04.28
venv 가상환경  (0) 2024.08.21
파이썬 패턴  (0) 2024.06.12
파일, 디렉토리 관리  (0) 2024.06.12
DataFrame, Column name 변경  (0) 2020.09.06

Nvidia-docker 설치 시 오프라인, 외부망 접근 금지 등으로 인해서 pip install 이 불가능하여 수작업으로 설치해야하는 경우가 있다.

 

이 경우 아래와 같은 순서로 설치한다.

libnvidia-container1_1.13.5-1_amd64.deb
libnvidia-container-tools_1.13.5-1_amd64.deb

nvidia-container-toolkit-base_1.13.5-1_amd64.deb

nvidia-container-toolkit_1.13.5-1_amd64.deb

 

1) 기존 nvidia-docker dpkg를 삭제

# 설치된 패키지 검색
$ dpkg --list | grep nvidia
ii  libnvidia-container-tools  1.9.0-1  amd64 NVIDIA container runtime library (command-line tools)
ii  libnvidia-container1:amd64 1.10.0-1 amd64 NVIDIA container runtime library
ii  nvidia-container-toolkit   1.9.0-1  amd64 NVIDIA container runtime hook
...

# 출력된 리스트 중 불필요한 구 파일 삭제
# dpkg -r [패키지명]
$ dpkg -r libnvidia-container-tools
$ dpkg -r libnvidia-container1:amd64
$ dpkg -r nvidia-container-toolkit

 

2) 순서대로 설치

$ dpkg - i libnvidia-container1_1.13.5-1_amd64.deb
$ dpkg - i libnvidia-container-tools_1.13.5-1_amd64.deb
$ dpkg - i nvidia-container-toolkit-base_1.13.5-1_amd64.deb
$ dpkg - i nvidia-container-toolkit_1.13.5-1_amd64.deb

 

3) [필수] 도커 서비스 재가동 (docker service restart)

$ systemctl restart docker

 

※ 참고사항

- 순서가 바뀌거나 더 필요한 게 있다면 하기와 같이 친절히 표기가 되니, 맞추어 설치한다.

   dpkg: dependency problems prevent configuration of nvidia-container-toolkit:
    nvidia-container-toolkit depends on nvidia-container-toolkit-base (= 1.13.5-1); however:
    Package nvidia-container-toolkit-base is not installed.

 

- 버전에 따라서, (1.10 이하) toolkit-base 설치가 필요없다. (toolkit-base 패키지도 없다.)

 

- 아래는 설치 안해도 괜찮다.

   nvidia-container-runtime_3.13.0-1_all.deb

   nvidia-docker2_2.13.0-1_all.deb

 

- nvidia-docker 설치 패키지(deb) 받는 곳

https://mirror.cs.uchicago.edu/nvidia-docker/libnvidia-container/stable/ubuntu20.04/amd64/

 

Index of /nvidia-docker/libnvidia-container/stable/ubuntu20.04/amd64/

 

mirror.cs.uchicago.edu

 

반응형

하기처럼 docker 이미지를 출력하면 docker repository 와 tag가 <none>으로 출력되는 경우가 있다.

$  docker images
REPOSITORY                                    TAG                                   IMAGE ID       CREATED        SIZE
<none>                                               <none>                              4d78d3e67cb5   1 months ago   30.8GB

sys                                                      v1.4                                   d38be44fe367    1 weeks ago     20.8GB

    ... ...

opt                                                      v1.1                                   a38be45fe457     2 weeks ago     10.1GB

 

<none>으로 표기된 이미지를 삭제하지 않고 이름을 붙일 필요가 있다면, 하기 명령으로 repository와 tag를 부여할 수 있다.

docker image tag [image_id] [repository name:tag]

 

사례)

$ docker image tag 4d78d3e67cb5  test:v1.0

$ docker images

REPOSITORY                                    TAG                                   IMAGE ID       CREATED        SIZE
test                                                      v1.0                                   4d78d3e67cb5   1 months ago   30.8GB

sys                                                      v1.4                                   d38be44fe367    1 weeks ago     20.8GB

 

해당 원인은 여러 개가 있는데 주로 빌드 할 때, 이미 존재하는 레포지토리:태그명과 중복된 상태로 빌드하거나 이미지가 제대로 빌드 되지 않아서 발생하며 Dangling Image라고 부른다.

위처럼 repository와 tag 명을 강제로 붙여줄 수도 있으나 삭제하는 게 좋을 경우가 많다. 이 경우 하기 명령으로 삭제 한다.

아래 세 개 명령은 약간으 ㅣ차이는 있으나 모두 Dangling Image를 삭제하게 된다.

 

1) $ docker iamge prune

2) docker rmi $(docker images --filter "dangling=true" -q --no-trunc)

3) $ docker rmi $(docker images -a|grep "<none>"|awk '$1=="<none>" {print $3}')

 

 

반응형

 

모바텀은 매우 편한 터미널이지만 종종 세션이 끊어지거나 연결이 죽는 현상(freezing)이 발생한다. 모바텀 세션이 끊기거나 죽는 현상은 2개이다.

  - 세션이 죽거나 화면이 멈추는 현상 (freezing) 

  - 사용이 오래되어 세션이 끊기는 현상 (stopped session)

 

1. 세션이 죽거나 화면이 멈추는 현상 (freezing) 

이것은 상당히 쓰기 불편한데, 하단과 같이 처리하면 해결된다.

 

모바텀 메뉴 Settings → Configuration →  SSH (tab) → GSSAPI Kerberos 체크 제거

 

리눅스에서 종종 있는 문제로 GSSAPI kerberos 가 활성화되어 있으면 keberos DNS에 질의를 하는데 DNS 응답이 늦어질 경우 접속지연이 발생한다. 이로 인해 간헐적으로 접속지연이 발생하거나 화면이 멈추는 현상이 발생한다.

 

만약 서버에서 설정하고 싶다면

vi /etc/ssh/sshd_config

GSSAPIAuthentication no

 

을 입력하고 저장한다.

 

2. 사용이 오래되어 세션이 끊기는 현상 (stopped session)

이것은 사실 정상적인 애플리케이션의 처리현상이다. 다만, 역시 불편하다.  하기와 같이 나올 때 세션이 끊긴 것이다.

 Network error: Software caused connection abort
 ─────────────────────────────────────────────────────
 Session stopped
     - Press <Return> to exit tab
     - Press R to restart session
     - Press S to save terminal output to file

 

모바텀 메뉴 Settings → Configuration →  SSH (tab) → SSH keepalive 체크 추가

(버전에 따라 다른데, Fix connection issues 체크 버튼이 보이면 추가로 체크해야 한다.)

 

반응형

 

□ 가상 환경 생성

cd 가상환경을 설치할 경로

python -m venv 가상환경이름

 

Windows - 가상환경 실행(활성화)
가상환경이름\Scripts\activate

□ macOS, Linux - 가상환경 실행(활성화)
source 가상환경이름/bin/activate

 

Windows, macOS, Linux - 가상환경 종료(비활성화)
deactivate

 

설치된 패키지 리스트 txt 파일로 변환

pip freeze > requirements.txt

 

변환된 txt 파일로 패키지 설치하기
pip install -r 파일이름.txt

반응형

'programming > Python' 카테고리의 다른 글

고유 식별자(unique id) 생성  (0) 2025.04.28
os.walk - 하위 디렉토리 포함 모든 파일 탐색  (0) 2025.04.10
파이썬 패턴  (0) 2024.06.12
파일, 디렉토리 관리  (0) 2024.06.12
DataFrame, Column name 변경  (0) 2020.09.06

잘 쓰여진 데이터 분석 관련 글

 

https://brunch.co.kr/@data/10

 

데이터 분석을 위한 5단계 절차

Part1. 공공데이터 분석의 개념 | 이번 글에서는 공공분야 데이터 분석 절차를 설명한다. 필자의 경험상, 공공데이터 분석은 통상 5가지 단계에 의하여 이루어진다. 이 단계는 폭포수 모델 처럼

brunch.co.kr

 

반응형

+ Recent posts