2024년 7월 20일 토요일

unity UI Particle 소개

 최근 개발중인 작품에서 UI에서 파티클 출력하는 부분이 필요해서 조사해 보았습니다.

대부분의 파티클들이 UI 모드에서는 나오지 않는 편이 많았는데 그중에 아래 링크의 오픈소스로된 부분을 참고해서 작업을 하였습니다. 

그럼 소개입니다.

https://github.com/mob-sakai/ParticleEffectForUGUI

그중에서도 가장 필요한 기능이었던 특정 target으로 파티클이 이동하는 기능이 필요했는데 해당 기능도 여기에서 UIParticleAttractor 라는 스크립트로 제공을 하였습니다.

Component: UIParticleAttractor

UIParticleAttractor attracts particles generated by the specified ParticleSystem.

 

설치

설치하는 방법은 해당 게시물에 아래부분 참고 부탁드립니다.

OpenUPM을 설치해야 하는데 npm 설치가 필요한데 npm을 설치하려면 node.js 설치가 필요합니다.

  • This package is available on OpenUPM package registry.
  • This is the preferred method of installation, as you can easily receive updates as they're released.
  • If you have openupm-cli installed, then run the following command in your project's directory:
    openupm add com.coffee.ui-particle

    정리하자면, Node.js (npm이 포함됨) -> npm install -g openupm-cli -> cd 작업 폴더 -> openupm add com.coffee.ui-particle 이런 순서로 설치합니다.

    중간에 작업 폴더로 이동해서 설치가 필요합니다.

    아래 링크 다른 패키지 설치하는 예제인데 참고 하시면 됩니다.

    https://openupm.com/#get-started-with-cli-optional


    설치가 완료되면 예제가 없어서, 다시 github demo https://github.com/mob-sakai/ParticleEffectForUGUI/tree/main/Samples~ 이 파일만 받아서 ~를 제거하고 Asset 폴더에 넣어서 실행을 했습니다.


    UIParticleAttractor 

    타겟이 되는 object에 UIParticleAttractor을 추가해 줍니다. 자세한건 예제를 보시면 됩니다.









    2024년 7월 8일 월요일

    Unity Hold on 에서 (hang) 멈추는 현상

     유니티를 실행하다 보면 가끔 아래와 같이 Hold on 에서 무한 대기하는 경우가 있습니다.



    원인이 다양하겠지만, 가장 유력한 범인은 ... 바로 당신입니다.

    가장 최근에 추가한 모듈이나 소스를 의심하시기 바랍니다.

    저 상태에서 다음 상태로 안 넘어 가는 원인 중 하나는 Update() 루틴이 수행되지 못하고 있기 때문입니다.

    어제밤 이 문제로 구글링 하면서 Unity 여러 버전 삭제도 해보고 antivirus 프로그램 중지도 해보았으나 전혀 효과가 없었습니다.

    Start() 함수에 최근에 특별히 추가된 코드가 없는지 확인해보기 바랍니다. 어딘가에서 무한 루프에 빠져 있거나 무한 메모리 증식중일 수 있습니다.

    저의 경우는 Start() 함수에 의해 발생한 현상이었습니다.


    2024년 6월 15일 토요일

    Termux 설치 및 사용

    Termux 설치 및 사용

    Android Linux terminal emulator 입니다.

    ( 안드로이드에서 리눅스를 사용할 수 있게 해줍니다. 컴파일 도구도 있습니다. )

    F-Droid 스토어에서 검색 해서 설치 하거나

    F-Droid : https://f-droid.org/ko/

    github 에서 직접 설치

    https://github.com/termux/termux-app/releases


    기본 설정

    pkg update

    pkg upgrade


    storage 접근을 편하게 하기 위해서

    https://wiki.termux.com/wiki/Termux-setup-storage // 상세 내용, storage를 만들고 심볼릭 링크를 생성한다

    termux-setup-storage // 실행전 환경설정>어플리케이션>termux의 모든 권한을 허용해주고 실행 시킨다.

    정상적으로 권한이 획득 되었으면

    ls ~/storage/ 실행시 권한이 정상적으로 획득되었다면 아래와 같은 폴더가 보입니다.

    PC의 파일을 옮길때 아래와 같이 사용하면 편합니다.

    adb push [윈도우에 있는 파일명] /storage/emulated/0/download

    mv ~/storage/downloads/[파일명] ~/llama.cpp/models


    PC 와 연결(SSH) 설정

    (이것을 진행하지 않는다면 매번 전화기에 입력해야 해서 불편 합니다.)

    설치 후 패스워드 관련 설정이 필요하므로 아래 내용 설치해줍니다.

    pkg install openssh

    sshd // 구동

    "sshd 실행시 no hostkeys available -- exiting" 에러가 발생한다면 pkg uninstall openssh 를 실행한 뒤 다시 설치하도록 합니다.

    서버 설정을 바꾸게 되는 경우 재시작이 필요할 수 있는데 pkill sshd 로 서버를 중지 후 다시 시작하면 됩니다.

    whoami // 접속할 id가 뭔지 확인, 이 값은 장치마다 다릅니다.

    passwd // 접속 비밀번호 설정합니다.

    ifconfig // 실행후 wlan0 항목을 확인 후 ip주소를 알아냅니다. 물론 WIFI설정에 할당된 주소를 확인해도 됩니다.



    Windows 에서 SSH로 Android 연결

    Windows에는 SSH 실행 파일이 기본으로 존재합니다.


    ssh <ServerIP> -p <port> -l <id> 와 같이 입력해서 접속 했습니다.
    <ServerIP>는 ipconfig의 wlan0 값의 ip를 입력합니다.
    <port> 는 8022로 접속 합니다. (기본 포트는 22 라서 에러가 발생합니다.)
    <id>는 앞에서 whoami 를 입력한 출력한 값을 입력합니다.


    adb로 연결하기


    Termux 설치한 단말기가 network을 가지고 있지 않거나 같은 network 환경에 있지 않다면 ip 로 접속을 할 수 없습니다.
    이때는 adb port forward로 사용이 가능합니다.

    adb forward tcp:8022 tcp:8022


    위와 같이 한번 해주고 ip는 localhost ssh 로 접속하면 됩니다. 이때 id(u0_a412) 는 앞에서 whoami 로 확인한 id 입니다.

    ssh localhost -p 8022 -l u0_a412


    간호 yes/no/[fingerprint]가 나오는 경우 yes를 선택하고 비밀번호를 입력해 주면 됩니다.









    2024년 6월 9일 일요일

    Java class file version error

     

    Error: A JNI error has occurred, please check your installation and try again

    Exception in thread "main" java.lang.UnsupportedClassVersionError: com/android/sdklib/tool/sdkmanager/SdkManagerCli has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 52.0


    Java 클래스 파일 버전과 JDK 릴리스 버전 참고

    • 클래스 파일 버전 45.0: Java 1.1
    • 클래스 파일 버전 46.0: Java 1.2
    • 클래스 파일 버전 47.0: Java 1.3
    • 클래스 파일 버전 48.0: Java 1.4
    • 클래스 파일 버전 49.0: Java 5 (JDK 1.5)
    • 클래스 파일 버전 50.0: Java 6 (JDK 1.6)
    • 클래스 파일 버전 51.0: Java 7 (JDK 1.7)
    • 클래스 파일 버전 52.0: Java 8 (JDK 1.8)
    • 클래스 파일 버전 53.0: Java 9
    • 클래스 파일 버전 54.0: Java 10
    • 클래스 파일 버전 55.0: Java 11
    • 클래스 파일 버전 56.0: Java 12
    • 클래스 파일 버전 57.0: Java 13
    • 클래스 파일 버전 58.0: Java 14
    • 클래스 파일 버전 59.0: Java 15
    • 클래스 파일 버전 60.0: Java 16
    • 클래스 파일 버전 61.0: Java 17


    WSL 설치, 사용하기, windows에서 접근


    0. WSL 설치를 위한 준비

    Hyper-V enable : BIOS 설정에 있는 PC가 있습니다.

    Windows 기능 켜기/끄기에서 아래 두가지 항목을 활성화 합니다.

    Windows 하이퍼바이저 플랫폼, 가상 머신 플랫폼




    1. 설치 가능한 Linux 배포판 목록

    wsl -l -o

    (실행 결과)

    다음은 설치할 수 있는 유효한 배포 목록입니다.

    'wsl --install -d <배포>'를 사용하여 설치하세요.

    NAME                                   FRIENDLY NAME

    Ubuntu                                 Ubuntu

    Debian                                 Debian GNU/Linux

    kali-linux                             Kali Linux Rolling

    Ubuntu-18.04                           Ubuntu 18.04 LTS

    Ubuntu-20.04                           Ubuntu 20.04 LTS

    Ubuntu-22.04                           Ubuntu 22.04 LTS

    Ubuntu-24.04                           Ubuntu 24.04 LTS

    OracleLinux_7_9                        Oracle Linux 7.9

    OracleLinux_8_7                        Oracle Linux 8.7

    OracleLinux_9_1                        Oracle Linux 9.1

    openSUSE-Leap-15.5                     openSUSE Leap 15.5

    SUSE-Linux-Enterprise-Server-15-SP4    SUSE Linux Enterprise Server 15 SP4

    SUSE-Linux-Enterprise-15-SP5           SUSE Linux Enterprise 15 SP5

    openSUSE-Tumbleweed                    openSUSE Tumbleweed


    2. 설치방법

    wsl --install -d Ubuntu-20.04


    3. 설치된 배포판 목록(여러개 설치 가능)

    wsl -l -v

    (실행 결과)

      NAME            STATE           VERSION

    * Ubuntu-22.04    Running         2


    4. 설치된 Linux 실행 방법

    docker를 사용하지 않는다면 아래와 같이 검색하면 설치된 Linux가 검색되고 클릭하면 됩니다.



    5. WSL 저장 장소 접근 방법

    Windows에서 접근 : 내 PC 에 Linux로 접근함



    Linux에서 접근 : /mnt 폴더로 접근




    6. conda 설치

    mkdir -p ~/miniconda3

    wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda3/miniconda.sh

    bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3

    rm -rf ~/miniconda3/miniconda.sh


    7. conda 가상 환경 설치 방법

    conda create --name <이름> python=3.11

    conda activate <이름>


    8. conda activate 가 안되고 conda init을 하라고 할때

    근본적인 원인은 계정 root에 .bashrc 에 추가된 conda 가 실행이 안되어서 그렇습니다.

    conda를 제대로 설치했다면 PC재시작 하는 방법이 있고, 만약 재시작 하기 싫다면 source .bashrc 를 실행하면 (base)가 붙은 가상 환경이 나옵니다. 


    2024년 5월 11일 토요일

    GPT, LLM 의 이해와 용어 정리

     GPT 란

    GPT는 "Generative Pre-trained Transformer"의 약자입니다. GPT 모델은 기본적으로 자연어 처리를 위한 딥러닝 모델로, 대규모의 텍스트 데이터를 학습하여 문장을 생성하거나 이해하는 데 사용됩니다. 이 모델은 트랜스포머(Transformer)라는 구조를 기반으로 하며, 사전에 학습된(pre-trained) 모델을 기반으로 새로운 작업에 대해 추가적인 학습을 통해 성능을 높일 수 있습니다. GPT 모델은 대화 시스템, 문장 생성, 요약, 번역 등 다양한 자연어 처리 작업에 활용될 수 있습니다.


    Transformer란

    Transformer는 딥러닝 모델의 하나로, 자연어 처리 및 기타 시퀀스 기반 작업에 사용되는 뛰어난 성능을 보이는 모델 아키텍처입니다. 이 아키텍처는 "Attention is All You Need"라는 논문에서 처음으로 소개되었습니다. https://proceedings.neurips.cc/paper/2017/file/3f5ee243547dee91fbd053c1c4a845aa-Paper.pdf

    Transformer 아키텍처는 어텐션 메커니즘(attention mechanism)을 사용하며 이를 통해 문장의 각 단어 간의 상관 관계를 이해하고 처리할 수 있습니다.

    Transformer는 인코더(encoder)와 디코더(decoder)라는 두 개의 주요 구성 요소로 구성됩니다. 인코더는 입력 시퀀스를 임베딩하고, 이를 통해 입력 시퀀스의 정보를 추출합니다. 디코더는 인코더의 출력과 디코딩된 출력을 사용하여 출력 시퀀스를 생성합니다. 이러한 구조는 기계 번역, 대화 시스템, 요약 등의 작업에 사용됩니다. Transformer는 효율적인 병렬 처리와 높은 성능을 제공하여 많은 자연어 처리 작업에서 사용되고 있습니다.

    Transformer 구조


    토큰과 토크나이저

    "토큰(Token)"은 텍스트 데이터를 작은 단위로 나누는 과정에서 사용되는 용어입니다. 자연어 처리에서, 토큰은 문장 또는 문서를 단어, 구두점, 숫자 등의 작은 단위로 분할하는 과정에서 생성됩니다.

    예를 들어, "나는 학교에 갔다"라는 문장을 토큰화하면 다음과 같이 단어 단위로 분할될 수 있습니다:

    "나는", "학교에", "갔다"

    토큰은 텍스트를 이해하고 처리하는 데 사용됩니다. 딥러닝 모델에서는 텍스트 데이터를 토큰 단위로 분할하여 입력으로 사용하며, 이를 통해 모델은 단어의 시퀀스로 이루어진 데이터를 처리할 수 있습니다.

    이때 토큰을 나누는 도구가 토크나이저가 됩니다.


    텍스트 임베딩

    LLM(언어 모델)에서도 텍스트 임베딩(Text Embedding)은 중요한 개념입니다. LLM은 텍스트의 의미를 이해하고 생성하기 위해 대규모의 텍스트 데이터를 학습합니다. 이 과정에서, LLM은 단어, 문장 또는 문서를 고차원의 벡터 공간에 매핑하여 텍스트 임베딩을 생성합니다.


    Attention

    Attention은 query와 key-value 쌍을 output에 매핑하는 것



    가령, "나는 오늘 밥을 먹었다"와 "나는 내일 운동을 할 것이다" 라는 두 문장을 비교해 보겠습니다. 이 문장들을 번역하거나, 유사도를 비교하는 작업을 수행한다고 가정해 봅시다.

    쿼리(Query): 두 번째 문장에서 "운동"이라는 단어를 고려해 보겠습니다. "운동"이라는 단어가 쿼리(Query)가 됩니다.

    키(Key) 및 값(Value): 첫 번째 문장과 두 번째 문장에 있는 모든 단어들이 키(Key)와 값(Value)이 됩니다.

    이제 어텐션 메커니즘을 사용하여 "운동"이라는 단어와 다른 단어들 간의 관련성을 측정하고, 이를 기반으로 가중 평균을 계산하여 "운동"과 관련된 정보를 추출할 수 있습니다.

    예를 들어, "운동"과 "밥을" 사이의 유사도가 낮을 것이고, "운동"과 "오늘" 혹은 "내일"과의 유사도가 높을 것입니다. 이 정보를 기반으로 "운동"과 관련된 의미를 보다 잘 이해하고, 번역하거나 유사도를 측정하는 데 사용할 수 있습니다.

    이런 식으로 어텐션 메커니즘은 주어진 작업에 필요한 정보에 집중하고, 입력 데이터의 다양한 부분 간의 관련성을 이해하는 데 도움이 됩니다. 

    위의 예시에서는 text를 들었지만 실제 동작에서는 텍스트 임베딩이 된 수치 형태의 벡터 상태로 동작됩니다.


    Self-Attention 

    하나의 "단일한" 시퀀스(예: 문장)에서 각기 다른 위치에 대해 어텐션 메커니즘을 적용


    BERT

    BERT(또는 Bidirectional Encoder Representations from Transformers)는 2018년에 구글에서 발표된 자연어 처리 모델입니다. BERT는 트랜스포머(Transformer) 아키텍처를 기반으로 하며, 대량의 텍스트 데이터를 사전 학습(pre-training)하여 언어 이해의 다양한 작업에 활용할 수 있도록 만들어졌습니다.

    1. 양방향(bidirectional) 모델: BERT는 입력 문장의 좌우 문맥을 모두 고려하여 단어를 이해합니다. 이전의 자연어 처리 모델들은 단어를 왼쪽에서 오른쪽으로 순차적으로 처리했지만, BERT는 양방향으로 문맥을 고려하여 더욱 정확한 표현을 생성합니다.

    2. 사전 학습과 파인 튜닝: BERT는 대규모의 텍스트 데이터를 미리 학습한 후, 특정 작업에 맞게 추가적인 학습 없이도 적용할 수 있습니다. 이를 통해 다양한 자연어 처리 작업에서 뛰어난 성능을 발휘할 수 있습니다. 또한, 특정 작업에 맞게 추가 학습(fine-tuning)을 수행하여 성능을 더욱 향상시킬 수 있습니다.

    3. 다양한 자연어 처리 작업에 적용 가능: BERT는 문장 분류, 질문 응답, 텍스트 유사도 측정, 개체명 인식 등 다양한 자연어 처리 작업에 적용할 수 있습니다. 또한, 다양한 언어에 대한 사전 학습 모델도 제공되어 다국어 처리에도 유용하게 활용될 수 있습니다.

    트랜스포머의 인코더 구조를 가져와 양방향으로 진행시킨 Masked Language Model

    Masked Language Model 통해서 학습을 합니다.


    Masked Language Model 

    BERT는 '말을 배우는' Large Model입니다. 특정 Input과 label에 따라 Task를 수행하는 법을 배우는 모델이 아닙니다.

    BERT의 공부법은 Masked 단어 학습법이다. 이 학습법은 Label이 주어지지 않습니다.(Unsupervised Learning) 그냥 주어진 문장이 있다면, 토큰 단위별로 가려보면서 앞뒤의 문맥을 보고 그 빈칸 안에 들어갈 것을 추론하는 과정을 통해 배우게 됩니다.


    GPT 와 BERT

    BERT는 딥러닝의 트랜스포머 기술을 이용한 양방향 인코딩 모델(‘임베딩 모델’ 또는 ‘문서 표현 모델’)이고, GPT는 트랜스포머 기술을 이용해 사전 학습된 ‘생성 모델’입니다. 즉, ‘BERT 모델’과 ‘GPT 모델’에서 모델은 대규모 학습 말뭉치의 내용을 구조화해 그 내용을 가장 잘 표현하는 형태로 구조화한 것이라는 의미고, 언어 모델에서 모델은 언어 처리 방법론을 논리적이고 체계적으로 정립한 것이다.


    LLM

    "LLM"은 "Large Language Model"의 약어로, 대규모 언어 모델을 가리킵니다. 이는 자연어 처리 분야에서 사용되는 매우 큰 규모의 딥러닝 모델을 의미합니다. LLM은 대량의 텍스트 데이터를 학습하여 텍스트 이해, 생성 및 기타 자연어 처리 작업을 수행할 수 있습니다.

    LLM은 최근 몇 년 동안 자연어 처리 분야에서 주목을 받고 있으며, 다양한 응용 분야에 적용되고 있습니다. 대표적인 LLM 중 하나는 OpenAI의 GPT(Generative Pre-trained Transformer) 시리즈입니다. GPT 모델은 트랜스포머(Transformer) 아키텍처를 기반으로 하며, 대규모의 텍스트 데이터를 사전 학습(pre-training)한 후, 다양한 자연어 처리 작업에 적용할 수 있습니다.

    LLM은 다음과 같은 작업을 수행할 수 있습니다:

    텍스트 생성: 주어진 문맥에서 다음 단어나 문장을 생성합니다.

    문장 분류: 텍스트를 여러 범주 중 하나로 분류합니다.

    기계 번역: 한 언어로 작성된 문장을 다른 언어로 번역합니다.

    요약: 긴 문서를 짧게 요약합니다.

    질문 응답: 주어진 질문에 대한 답변을 생성하거나 추출합니다.

    LLM은 대량의 텍스트 데이터를 학습하여 언어의 다양한 특성과 구조를 학습하며, 이를 통해 다양한 자연어 처리 작업에 효과적으로 활용할 수 있습니다. 이러한 모델은 실제 응용 분야에서 문제 해결과 혁신을 이끌어내는 데 중요한 역할을 하고 있습니다.


    LLM 과 GPT관계?

    "LLM"과 "GPT"는 실제로 같은 개념을 가리키는 것이 아니며, GPT는 LLM의 한 종류입니다.

    1. LLM (Large Language Model): LLM은 대규모 언어 모델을 의미합니다. 이는 자연어 처리 분야에서 사용되는 매우 큰 규모의 딥러닝 모델을 의미합니다. LLM은 대량의 텍스트 데이터를 학습하여 텍스트 이해, 생성 및 기타 자연어 처리 작업을 수행할 수 있습니다. 예를 들어, GPT(Generative Pre-trained Transformer) 시리즈는 LLM의 한 종류입니다.

    2. GPT (Generative Pre-trained Transformer): GPT는 OpenAI에서 개발된 대표적인 LLM의 한 종류입니다. GPT 모델은 트랜스포머(Transformer) 아키텍처를 기반으로 하며, 대규모의 텍스트 데이터를 사전 학습(pre-training)한 후, 다양한 자연어 처리 작업에 적용할 수 있습니다. GPT 모델은 문맥을 이해하고 다음 단어를 예측하거나 텍스트를 생성하는 등의 작업을 수행할 수 있습니다.

    따라서, GPT는 LLM의 한 종류로 볼 수 있으며, LLM은 자연어 처리 분야에서 다양한 모델을 포괄하는 개념입니다.


    프롬프트

    프롬프트(prompt)란 모델에 입력되는 시작 문장 또는 문장 조각을 의미합니다. 프롬프트는 모델에게 원하는 작업을 수행하도록 지시하거나 특정 유형의 텍스트 생성을 유도합니다.

    프롬프트는 사용자가 원하는 텍스트 생성 작업을 설정하는 데 중요한 역할을 합니다. 예를 들어, "Once upon a time"과 같은 프롬프트는 이야기의 시작을 나타내며, 모델에게 이야기를 생성하도록 요청합니다. 비슷하게, "Translate the following sentence into French"과 같은 프롬프트는 모델에게 주어진 문장을 프랑스어로 번역하도록 지시합니다.

    프롬프트는 모델이 텍스트 생성 작업을 시작하는 데 중요한 역할을 합니다. 올바른 프롬프트를 사용하면 모델이 원하는 결과를 생성하는 데 도움이 되며, 모델의 생성된 텍스트의 품질과 일관성에 영향을 미칠 수 있습니다. 따라서 적절한 프롬프트를 선택하는 것이 중요합니다.


    폐쇄 환경에서 GPT 사용

    LLaMA

    LLaMA는 메타의 오픈소스 언어모델입니다.


    LM Studio 로 LLaMA 사용 그리고 LangChain

    랭체인(LangChain)은 대규모 언어 모델과 애플리케이션의 통합을 간소화하는 SDK입니다.


    프롬프트의 중요성

    프롬프트 엔지니어링(prompt engineering)은 자연어 처리 모델을 사용하여 특정 작업을 수행할 때, 적절한 프롬프트를 설계하고 조정하는 과정을 의미합니다. 이는 모델이 원하는 결과를 생성하고 원하는 방식으로 작동하도록 유도하는 것을 목표로 합니다.


    LLM(GPT)으로 번역기 만들기

    번역 SW를 따로 개발할 필요없이 GPT를 구동할 수 있다면 쉽게 번역기를 만들 수 있습니다.

    ChatGPT에 아래와 같이 사용하면 되며, 이것을 프롬프트 사용이라고 합니다.

    "다음 문장을 한글로 번영해주세요."

    """문장""" 


    GPT로 요약하기

    GPT로 흔히 볼 수 있는것이 요약하는것입니다.

    "아래 문장을 간단하게 요약해주세요."

    """문장"""


    토큰의 제약

    GPT 모델은 토큰 수에 대한 제약 사항이 있습니다. 이러한 제약 사항은 모델의 입력 최대 길이와 관련이 있으며, 주로 모델의 아키텍처와 하드웨어 자원의 한계에 따라 결정됩니다. 그래서 긴 길이의 문장은 생성할 수 없으며, 대화도 길게 유지하기가 어렵습니다.


    Hallucination

    GPT와 같은 자연어 처리 모델이 실제로는 존재하지 않는 정보를 생성하는 현상을 가리킵니다. 이는 모델이 훈련될 때 사용된 데이터에는 없는 내용이나 사실을 생성하는 것을 의미합니다. GPT는 알 수 없는 것(훈련이 안된 것)을 알 수 없다라고 말하지 못합니다.


    RAG(검색 증강)

    RAG(Retrieval-Augmented Generation)는 텍스트 생성 모델인 GPT와 정보 검색 모델을 결합하여 더욱 정확하고 다양한 텍스트 생성을 가능하게 합니다.

    검색 증강 생성(RAG)은 프라이빗 또는 독점 데이터 소스의 정보로 텍스트 생성을 보완하는 기술입니다. 대규모 데이터 세트 또는 지식 기반을 검색하도록 설계된 검색 모델에 해당 정보를 가져와 읽을 수 있는 텍스트 응답을 생성하는 대규모 언어 모델(LLM)과 같은 생성 모델을 결합합니다. 검색 증강 생성은 추가 데이터 소스의 컨텍스트를 더하고 훈련을 통해 LLM의 원래 지식 기반을 보완함으로써 검색 경험의 정확도를 개선할 수 있습니다. 따라서 모델을 다시 훈련할 필요 없이 대규모 언어 모델의 출력이 향상됩니다. 추가 정보 소스는 LLM의 훈련에 사용되지 않은 인터넷의 새로운 정보부터 독점 비즈니스 컨텍스트 또는 비즈니스에 속한 기밀 내부 문서에 이르기까지 다양합니다. RAG는 생성형 AI 시스템이 외부 정보 소스를 사용하여 보다 정확한 상황 인식 응답을 생성할 수 있도록 해주기 때문에 질문 답변 및 콘텐츠 생성과 같은 작업에 유용합니다. 일반적으로 시맨틱 검색이나 하이브리드 검색과 같은 검색 방법을 구현하여 사용자 의도에 응답하고 보다 정확한 결과를 제공합니다.

    ChatGPT4.0 에 pdf 문서를 첨부하면 pdf 문서에서 사실을 검색해준다던가, ChatGPT4.0에 브라우저를 이용해서 최신 컨텐츠를 검색하는 기능을 말합니다.


    FineTuning

    "Fine-tuning(미세 조정)"은 기계 학습에서 사전에 훈련된(pre-trained) 모델을 특정한 작업에 맞게 추가적인 훈련을 진행하는 과정을 의미합니다. 이는 이미 학습된 모델의 일부 레이어 또는 파라미터를 고정시킨 채로 새로운 데이터셋에 대해 추가적인 학습을 수행하여 모델을 특정 작업에 맞게 세밀하게 조정하는 것을 말합니다.

    예를 들어, 범용 LLM은 다양한 언어 정보를 포함하고 유창한 대화에 참여할 수 있습니다. 그러나 의료 분야에서는 환자의 질문에 효과적으로 응답할 수 있는 애플리케이션을 구축하기 위해 대규모 언어 모델을 새로운 의료 데이터에 노출시켜야 합니다. 


    LoRA

    언어 모델 영역에서는 특정 데이터에 대해 특정 작업을 수행하도록 기존 언어 모델을 미세 조정하게 됩니다.

    전체 미세 조정에는 신경망의 모든 레이어를 최적화하거나 훈련하는 작업이 포함됩니다. 이 접근 방식은 일반적으로 최상의 결과를 얻을 수 있지만, 리소스와 시간이 가장 많이 소요되는 방식이기도 합니다.

    LoRA는 사전 학습된 대규모 언어 모델의 가중치 행렬을 구성하는 모든 가중치를 미세 조정하는 대신, 작은 행렬을 미세 조정하는 개선된 미세 조정 방식입니다.


    2024년 4월 28일 일요일

    Stable-diffusion / SDXL 설치

    Stable-diffusion / SDXL 설치


    windows 환경에서 설치 방법입니다.


    1. stable-diffusion-webui 설치

    https://github.com/AUTOMATIC1111/stable-diffusion-webui

    최신 버전도 많지만 v1.5.1 tag가 붙은 버전을 설치합니다.

    https://github.com/AUTOMATIC1111/stable-diffusion-webui/releases/tag/v1.5.1

    stable-diffusion-webui-1.5.1.zip 파일을 다운로드 받아서 적당한 위치에 압축을 해제합니다.



    2. python 3.10.6 설치

    Stable-diffusion이 구동될려면 python, git 이 설치 되어어야 합니다.

    https://www.python.org/downloads/release/python-3106/

    버전을 맞춰주시고 path 설정도 해줍니다.

    1번에서 해제된 압축 파일을내에 webui-user.bat 파일을 열어

    PYTHON 경로를 넣어줍니다. (경로는 사용자마다 다릅니다.)

    예) set PYTHON=C:\Users\AppData\Local\Programs\Python\Python310\python.exe

    추가로 아래 부분도 변경 시켜주세요

    set COMMANDLINE_ARGS=--xformers --no-half-vae 

    이 부분을 안해주면 결과물이 이상하게 나옵니다.



    3. git 설치

    아래에서 맞는 버전을 설치해줍니다.

    https://git-scm.com/download/win


    4. SDXL 모델 다운로드

    huggingface 에서 각각 아래 파일을 다운로드 받습니다.

    https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/tree/main

    sd_xl_base_1.0.safetensors

    https://huggingface.co/stabilityai/stable-diffusion-xl-refiner-1.0/tree/main

    sd_xl_refiner_1.0.safetensors

    Stable-diffusion 만 설치하는 것이라면 4, 5 단계를 무시하면 됩니다.


    5. 다운로드 받은 파일을 models\Stable-diffusion 폴더로 복사

    경로는 아래 위치가 됩니다.


    6. webui-user.bat 실행

    실행된 내용에 있는 주소를 브라우저로 엽니다. 커맨드 라인의 Running on local URL 입니다.

    아래 화면에서는 http://127.0.0.1:7860/ 이곳입니다.




    stable diffusion checkpoint 에서 어떤 모델을 선택하느냐에 따라 SDXL이 되는 것입니다.

    앞에 다운로드 받았던, sd_xl_base_1.0.safetensors, sd_xl_refiner_1.0.safetensors 를 선택한다면  SDXL 이 됩니다.



    [에러 발생시]

    Version: 1.5.1

    Commit hash: <none>

    Launching Web UI with arguments:

    Traceback (most recent call last):

      File "D:\dev\SDXL\stable-diffusion-webui-1.5.1\launch.py", line 39, in <module>

        main()

      File "D:\dev\SDXL\stable-diffusion-webui-1.5.1\launch.py", line 35, in main

        start()

      File "D:\dev\SDXL\stable-diffusion-webui-1.5.1\modules\launch_utils.py", line 390, in start

        import webui

      File "D:\dev\SDXL\stable-diffusion-webui-1.5.1\webui.py", line 44, in <module>

        import gradio  # noqa: F401

      File "D:\dev\SDXL\stable-diffusion-webui-1.5.1\venv\lib\site-packages\gradio\__init__.py", line 3, in <module>

        import gradio.components as components

      File "D:\dev\SDXL\stable-diffusion-webui-1.5.1\venv\lib\site-packages\gradio\components.py", line 55, in <module>

        from gradio import processing_utils, utils

      File "D:\dev\SDXL\stable-diffusion-webui-1.5.1\venv\lib\site-packages\gradio\utils.py", line 339, in <module>

        class AsyncRequest:

      File "D:\dev\SDXL\stable-diffusion-webui-1.5.1\venv\lib\site-packages\gradio\utils.py", line 358, in AsyncRequest

        client = httpx.AsyncClient()

      File "D:\dev\SDXL\stable-diffusion-webui-1.5.1\venv\lib\site-packages\httpx\_client.py", line 1397, in __init__

        self._transport = self._init_transport(

      File "D:\dev\SDXL\stable-diffusion-webui-1.5.1\venv\lib\site-packages\httpx\_client.py", line 1445, in _init_transport

        return AsyncHTTPTransport(

      File "D:\dev\SDXL\stable-diffusion-webui-1.5.1\venv\lib\site-packages\httpx\_transports\default.py", line 275, in __init__

        self._pool = httpcore.AsyncConnectionPool(

    TypeError: AsyncConnectionPool.__init__() got an unexpected keyword argument 'socket_options'


    =>pip install httpx==0.24.1

    그런데 venv로 동작하고 있어서 venv 환경의 httpx 설치를 바꿔줘야 합니다.

    cmd 창을 열고

    설치된 폴더 stable-diffusion-webui-1.5.1\venv\Scripts 여기로 이동한뒤 activate.bat 를 실행 시킵니다. 그러면 아래와 같은 화면이 나오고 앞에 (venv) 가 붙습니다.



    위와 같이 pip install httpx==0.24.1 명령을 수행합니다.

    그 이후 webui-user.bat 를 다시 실행시키면 됩니다.