카테고리 없음2024. 5. 15. 18:43

이 학습 및 실험은 kohya_ss기반으로  https://infoengineer.tistory.com/134 의 설명을 그대로 따른다. 다만 아래와 같이 셋팅했다.

 

1. 집 고양이 사진을 100장 정도 준비했다. 600*400 정도로 리사이즈해둔다. 알씨같은 툴로 전체 선택후 일괄 조정이 가능하다.

 

2. kohya_ss를 시작한다. 설정은 기존 강좌와 동일하다. 물론 Utilities에서 BIP로 자막을 생성해둔다. 그리고 기존과 같은 방식으로 LORA로 학습하며 여기에서는 Civit의 Pet Photo(SD 1.5기반)를 base모델로 한다. 

    https://civitai.com/models/267871/pet-photography-album-of-animals-cats-and-dogs

   

아래는 셋팅의 내용들이다. 

 

 

3. 학습을 시작한다. 10 epochs으로 설정해두었다. (사실 3회 정도만으로도 충분히 효과를 얻을 수 있었으나 어쩐지 많이 돌리면 더 비슷하게 나올것 같은 마음이 늘 든다)

이미지 수정

 

4. Easy Diffusion을 통해 Lora를 구동한다. 단순한 합성과 다른 것은, 프롬프트를 통해 여러가지 효과를 줄 수 있다

  fat cat, cat with clothes, white background 같은 옵션으로 여러가지 효과를 얻는다. 다만 발이 여러개인 점은 피할 수 없는 것인가 보다. 필자의 경우에는 냥이의 전체적인 모습은 얼른 봐서는 차이점이 없다고 느끼는 정도로 유사했다. 

 

fat cat, 즉 뚱냥이로 묘사해서 얻은 이미지

 

with clothes 를 프롬프트에 넣어 얻은 이미지
a cat on the table, 어릴적 사진이 같이 들어가서 그런지 다양한 나이대를 보여준다. 발이 어색하다.

 

발과 몸이 어색한 경우가 있으나 전체적인 분위기는 동일하다.

 

반응형
Posted by 작동미학
머신러닝AI2024. 5. 1. 10:53

윈도우(windows)에서도 easy_diffusion과 kohya_ss를 어느 정도 실행해서 이미지 합성에 대한 작업을 진행할 수 있다.

Windows 10 pro + RTX 4080 (536.23 driver) 기준의 환경에서 실행해 보았다. 명령은 모두 command 상에서 실행한다

(윈도우키+R을 누른 후 cmd를 실행하면 명령 실행이 가능하다)

 

 

1. easy_diffusion

 

 

이 설치는 너무나 간단하다. 아래 링크에서 Windows용 Easy Diffusion 최신 버전을 받자

https://github.com/easydiffusion/easydiffusion/tree/main#installation

 

이 글을 쓰는 시점에서는 Easy Diffusion 3.0이 최신이다. 아래 Download for Windows 버튼을 누르고 실행해주면 된다. linux/mac/windows 동일한 방식으로 간단하게 실행해서 웹 인터페이스로 생성해볼 수 있다.

 

[easy_diffusion의 윈도우 설치 가이드 포함 페이지]

 

[easy_diffusion을 실행 설치하면 나오는 화면이다.내부에 conda와 git을 자체로 가지고 있다]
[설치가 끝나면 역시 자동으로 브라우저가 떠서 실행해볼 수 있게 된다.]

 

실제 사용 관련해서는 다른 글들을 참조하면 된다. models/stable-diffusion/ 에 사용하는 모델파일을 넣어 사용해보자(civit.ai에서 checkpoint 모델들을 크기가 크지만, 다양하게 다운로드 받을 수 있다. https://infoengineer.tistory.com/122 를 참조하자)

 

2. kohya_ss

 

모델을 학습하기 위한 kohya_ss에 대한 설치이다.

 

A. python 10와 git이 필요하다.

 

    개인적으로는 Anaconda설치를 권한다. 따라서 Anaconda 사이트에서 윈도우용 Anaconda를 설치하고

    아래와 같이 실행한다. git은 윈도우용 git을 다운로드받아( https://git-scm.com/download/win ) 기본옵션으로 설치하여 실행하면 된다. (만약에 python 3.10을 직접 설치해서 곧바로 진행한다고 하면 그렇게 해도 상관없다.)

 

    D:\dev\conda> conda create -n kohya_ss python=3.10

    D:\dev\conda> conda activate kohya_ss

 

B. git으로 kohya_ss를 checkout 하고 setup.bat를 실행한다.

 

    D:\dev> git clone https://github.com/bmaltais/kohya_ss.git 

    D:\dev> cd kohya_ss

    D:\dev\kohya_ss> setup.bat

 

 이때 NVidia GPU 사용자는 2번을 눌러 cudnn을 최신으로 받아주자. 시간이 조금 걸린다(고속화에 도움이 된다고 한다)

 그런 후 1번을 선택해 Kohya_ss를 GUI로 실행한다.

 

setup.bat 실행 후 화면, 2번과 1번을 차례대로 선택해주자.

끝나면 7. Exit Setup을 선택해서 나오면 된다.

 

C. 아래와 같이 실행하면 내부에 웹서버가 뜨면서 우리가 활용할 수 있는 단계로 진입한다.

 

 D:\dev\kohya_ss> gui.bat

kohya_ss 윈도우 실행화면

 

위의 마지막 부분에 표시된 http://127.0.0.1:7860 주소를 브라우저로 열어보자. kohya_ss의 gui가 보인다. 해당 사용법 관련해서는 연관 글을 참조한다. ( https://infoengineer.tistory.com/134 )

kohya_ss의 윈도우가 보인다.

 

 

 

 

 

 

반응형
Posted by 작동미학
머신러닝AI2024. 4. 27. 17:16

오픈소스 LLM 모델을 local에서 띄워서 구동하는 가장 손쉬운 방법은 ollama 이고 지난번에 소개한 적이 있다.

https://infoengineer.tistory.com/135

macos에서도 구동되기 때문에 너무나 간단하게 llama3, gemma, phi-3, command-r 등 어느정도 한글이 되는 모델들을 다운로드 받아서 구동시킬 수 있다.

 

그리고 일단 이렇게 구동되면 langchain과도 바로 연결된다.

 

$ ollama run llama3:instruct
>>> give me a joke
Here's one:
Why don't eggs tell jokes?
(wait for it...)
Because they'd crack each other up!
Hope that made you smile!
>>> Send a message (/? for help)

 

이렇게 구동이 되면 내부에 API 서버가 이미 구동되어 대기 상태가 된다(ollama serve 명령으로도 띄우는 것이 가능하다)

이후에는 아래와 같이 시험해볼 수 있다.

 

$ curl http://localhost:11434/api/generate -d '{
  "model": "llama3",
  "prompt":"Why is the sky blue?"
}'
{"model":"llama3","created_at":"2024-04-27T08:10:00.736586071Z","response":"What","done":false}
{"model":"llama3","created_at":"2024-04-27T08:10:00.746743823Z","response":" a","done":false}
{"model":"llama3","created_at":"2024-04-27T08:10:00.757109205Z","response":" great","done":false}
{"model":"llama3","created_at":"2024-04-27T08:10:00.768475258Z","response":" question","done":false}
....

{"model":"llama3","created_at":"2024-04-27T08:10:04.094431458Z","response":".","done":false}
{"model":"llama3","created_at":"2024-04-27T08:10:04.104777568Z","response":"","done":true,"context":[128006,.....,128009],"total_duration":3490085755,"load_duration":2410324,"prompt_eval_count":11,"prompt_eval_duration":75044000,"eval_count":327,"eval_duration":3368118000}

 

아니면 이제 langchain을 사용할 수도 있다.

 

$ cat > langchain_ollama_stream.py 
from langchain.callbacks.manager import CallbackManager
from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler
from langchain_community.llms import Ollama

llm = Ollama(
    model="llama3", callback_manager=CallbackManager([StreamingStdOutCallbackHandler()])
)
llm("The first man on the summit of Mount Everest, the highest peak on Earth, was ...")

$ python3 langchain_ollama_stream.py 

....

....

 

그 외에도 다양한 방식의 langchain사용이 가능하다. 잘 응용해서 사용해보자.

 

 

1) 간단한 invoke

 

from langchain_community.llms import Ollama

llm = Ollama(model="llama3")

llm.invoke("Tell me a joke")

 

 

2) 간단한 stream 형식의 출력

 

from langchain_community.llms import Ollama

llm = Ollama(model="llama3")

query = "Tell me a joke"

for chunks in llm.stream(query):
    print(chunks, end="")

 

반응형
Posted by 작동미학