머신러닝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 작동미학
머신러닝AI2024. 4. 27. 16:46

AI로 무엇을 하다보면 linux에 GPU로 환경을 구성하는데, 도대체 잘 이해가 가지 않는 것이 이 버전 관계다.

Ubuntu 버전, GPU 버전, NVidia driver버전, cuda 버전, cudnn 버전... 등등 헷갈린다. 이제 그 관계를 이해해보자.

 

결론은 지금 '24년초 시점에서는 Ubuntu 22.10, NVidia driver는 GPU버전에 맞는것(홈페이지 참조), CUDA는 11.8을 중심으로 설치하자. cudnn은 8.7 정도를 선택하면 되고 쉽게 바꿀 수 있다.

 

1. 먼저 CUDA 버전이 중요하다. CUDA 11.8이 가장 많이 호환되는 CUDA 버전이다.

 

 판단기준 : 내가 쓰는 프레임웍이 지원하는 CUDA는 무엇인가? 대개 11.8이다

 

 CUDA는 최근에 11, 12시리즈가 주력으로 사용되는데, 많은 오픈소스 프로젝트들이 11버전을 지원한다.

 특히 우리의 가장 중요한 친구 pytorch 2.1 미만 버전들이 CUDA 11에 의존한다. tensorflow나 주력으로 쓰는 framework들이 지원하는 버전을 확인해서 만약에 CUDA 12를 지원한다면 12버전을 쓸 수도 있겠다. 하지만 아직은 최신 버전들만 간신히 지원하는 CUDA12를 쓸 용기는 없다. 우리는 기존 소스코드를 돌려야 하기 때문이다.

 

 그러니 CUDA 11.8을 설치하자. 참고로 아래는 tensorflow의 버전별 CUDA + cudnn 버전이다. 각 프레임웍들이 각각 이런 정보를 공개한다.

https://www.tensorflow.org/install/source?hl=ko#gpu

 

2. NVidia driver는 아래와 같은 CUDA와의 호환 관계를 갖는다. 최신 CUDA는 최신 NVidia driver가 필요하다.

 

 판단기준 : 내가 쓰는 CUDA 버전이 최신일수록 최신의 NVidia driver를 설치해야 하는데, 내가 가진 GPU카드별로 지원하는 Driver 버전이 다르다.

 

 즉 어느정도 Driver 버전 이상이 되어야 CUDA가 지원된다. Linux와 Windows가 조금 다른 것에 주의하자.

아래가 대략의 정보이고 세부 정보는 이 링크를 확인해보자. https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html#id6

https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html#id6

 

 그리고 유의할 것은 해당 Driver 버전 중 일부는 특정 GPU 카드를 지원하지 않을 수 있다. 따라서 내가 가진 GPU 카드가 지원되는 드라이버 버전을 선택하자. 각 지원 버전은 NVidia 사이트에서 확인이 가능하다. 신기하게도 GPU마다 지원되는 버전이 들쑥날쑥하니 꼭 내 GPU카드가 지원하는 버전을 확인해두어야 한다. 혹시 Linux Package들이 이 드라이버 버전을 띄엄띄엄 지원할 수도 있으니, 아예 Linux에서 지원되는 버전별로 찾아봐서 내 GPU를 지원하는지 확인할 수도 있다.

https://www.nvidia.co.kr/Download/index.aspx?lang=kr

 

대략 525나 520, 515버전 등이 많이 설치하긴 한다. 여기서는 CUDA 11.8을 추천하려고 하므로 520이상을 설치하려고 노력해보자.

 

참고로 아래 명령을 통해 linux에 설치된 GPU정보나, 추천 드라이버를 제공받을 수 있다

 

$ lshw -C display           #RTX4080예시이다

  *-display                 
       description: VGA compatible controller
       product: NVIDIA Corporation
       vendor: NVIDIA Corporation
       physical id: 0
       bus info: pci@0000:01:00.0
       version: a1
       width: 64 bits
       clock: 33MHz

$ sudo ubuntu-drivers devices          #RTX4080예시이다

== /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0 ==
modalias : pci:v000010DEd00002704sv00001462sd00005111bc03sc00i00
vendor   : NVIDIA Corporation
driver   : nvidia-driver-545-open - third-party non-free
driver   : nvidia-driver-535 - third-party non-free
driver   : nvidia-driver-535-server - distro non-free
driver   : nvidia-driver-525-server - distro non-free
driver   : nvidia-driver-550-open - third-party non-free
driver   : nvidia-driver-550 - third-party non-free recommended
driver   : nvidia-driver-525 - third-party non-free
driver   : nvidia-driver-535-server-open - distro non-free
driver   : nvidia-driver-525-open - distro non-free
driver   : nvidia-driver-545 - third-party non-free
driver   : nvidia-driver-535-open - distro non-free

 

3. Ubuntu 버전과는 어떻게 되는가? 23.10보다는 22.04가 더 유리하다.

 

 판단기준 : Ubuntu버전이 아니라 설치된 gcc 버전이 중요하다. CUDA 11을 컴파일하기 위해 gcc 10이 필요하다.

 

 Ubuntu 23.10은 GCC 13버전 컴파일러를 디폴트로 사용하는 반면, CUDA 11/cudnn 등 컴파일에 GCC 10가 필요다. 그래서 사실은 Ubuntu 23.10을 사용해도 GCC 10버전 컴파일러를 디폴트로 정하면 사실은 쓸 수 있다. 그런데 GCC 버전을 왔다갔다하면서 설치할 배짱이 없다면 그냥 Ubuntu 22.04을 설치하자. 

 

혹시 Ubuntu 23.10을 써야한다면 아래 가이드를 참고하자. gcc 버전을 바꾸어 설치하는 방법과 원복하는 방법이 나와있다.

https://www.yodiw.com/install-cuda-11-on-ubuntu-23-10/

 

그래서 이러한 번거로움 때문에 Ubuntu 22.04을 설치해서 운영하도록 추천하게 된다.

 

4. cudnn은 어떻게 할까?

 판단기준 : CUDA 처럼 사용하는 프레임웍별로 필요한 버전을 설치해줘야한다. 대략 8.7 버전 정도가 현재는 제일 무난하다.

 

 cudnn의 8.7.0버전은 CUDA 11과 12모두 각각에 개별 버전별로 따로 있다(즉 8.7 버전이 CUDA 11, 12에 각각 배포판이 있다). 다행히 이 cudnn은 설치 후에도 쉽게 교체 및 추가 할 수 있다. 여러개를 설치하고 전환도 가능하다. 기존의 설치된 cuda의 include/lib 파일만 교체해주면 그만이기 때문이다.

 

이를 테면 CUDA가 /usr/local/cuda-11.8로 설치되어 있고 /usr/local/cuda -> /usr/local-11.8로 링크가 걸려있다고 치자.

그러면 cudnn은 적절히 다운로드 받은 패키지 파일의 압축을 풀고 덮어 씌우면 된다.

 

아래를 통해 다운로드 (로그인이 필요하다) 하고 그 이하의 절차로 include/lib파일을 복사해버리자.

https://developer.nvidia.com/rdp/cudnn-archive

 

$ tar -xzvf ${CUDNN_TAR_FILE}
$ sudo cp -P cuda/include/cudnn.h /usr/local/cuda-11.8/include
$ sudo cp -P cuda/lib/libcudnn* /usr/local/cuda-11.8/lib64/
$ sudo chmod a+r /usr/local/cuda-11.8/lib64/libcudnn*

 

간단하게 버전을 어떻게 잡으면 될지 잡아보았다. 상기 모두 정상 설치되면 아래 명령을 통해 설치 정보를 알 수 있다.

 

$ nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2022 NVIDIA Corporation
Built on Wed_Sep_21_10:33:58_PDT_2022
Cuda compilation tools, release 11.8, V11.8.89
Build cuda_11.8.r11.8/compiler.31833905_0

$ nvidia-smi

Sat Apr 27 16:54:09 2024       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 525.125.06   Driver Version: 525.125.06   CUDA Version: 12.0     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  NVIDIA GeForce ...  On   | 00000000:01:00.0  On |                  N/A |
|  0%   39C    P8    25W / 320W |    592MiB / 16376MiB |      0%      Default |

 

흥미로운 것은 위 nvidia-smi의 CUDA은 추천 cuda 버전이다.

 

실제 설치 cuda 버전은 nvcc 명령으로 확인하자.

 

5. python 버전은 어떻게 할까?

 

이것이야말로 실행할 프로젝트에 따라 다른데 대략 3.9~3.11정도가 추천되고 있다. 매우 세분화된 python버전을 요구할 수 있다(3.10.8이상 등). 따라서 설치할 프로젝트를 유심히 보는 수 밖에 없다. 하지만 우리는 여러개의 프로젝트를 실행하게 되기 때문에, 이 문제를 해결하기 위해 Anaconda(conda)를 사용하게 된다. 각 환경별로 서로다른 python과 package를 설정해 다중으로 사용하게 할 수 있는 합리적인 방법이다. Anaconda설치는 간단히 웹서핑해서 최근의 버전을 설치하면 된다.

 

Anaconda를 설치한 후 아래와 같은 형태로 이 python 버전에서 자유로워지자. 꼭 미리 conda create 명령으로 전용 환경을 구성한 후 conda activate를 통해 해당 환경을 활성화하고 실행하는 것이다. 디스크 용량을 필요로 하긴 하지만, 이보다 더 편안한 방법도 드물다. 적극 활용하도록 하자. (설치 경험이 없으신 분은 https://jongsky.tistory.com/21 를 참조하자) 아래는 대표적인 환경 구성 및 활성화, 설치 명령이다.

 

$ conda create -n llama2 python=3.9 -y

$ conda activate llama2

(llama2) $ pip install ...

$ ..

$ exit

반응형
Posted by 작동미학
머신러닝AI2024. 4. 20. 11:51

ollama는 많은 오픈소스 모델을 쉽게 구동해주는 프로젝트이다.

 

$ curl https://ollama.ai/install.sh 

$ chmod 755 install.sh

>> Downloading ollama...
######################################################################################################################################################################## 100.0%######################################################################################################################################################################## 100.0%######################################################################################################################################################################## 100.0%
>>> Installing ollama to /usr/local/bin...
[sudo] userid 암호: 
>>> Adding ollama user to render group...
>>> Adding current user to ollama group...
>>> Creating ollama systemd service...
>>> Enabling and starting ollama service...
>>> NVIDIA GPU installed.

$ ollama serve  #설치 후 자동 실행되지만 나중에는 이렇게 실행하면 된다.
Error: listen tcp 127.0.0.1:11434: bind: address already in use
$ ollama run llama3
pulling manifest 
pulling 00e1317cbf74... 100% ▕███████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ 4.7 GB                         
pulling 4fa551d4f938... 100% ▕███████████████████████████████████████████████████████████████████████████████████████████████████████████████▏  12 KB                         
pulling 8ab4849b038c... 100% ▕███████████████████████████████████████████████████████████████████████████████████████████████████████████████▏  254 B                         
pulling c0aac7c7f00d... 100% ▕███████████████████████████████████████████████████████████████████████████████████████████████████████████████▏  128 B                         
pulling db46ef36ef0b... 100% ▕███████████████████████████████████████████████████████████████████████████████████████████████████████████████▏  483 B                         
verifying sha256 digest 
writing manifest 
removing any unused layers 
success 
>>> IT팀에 첫 부임하는 팀장인데 한글로 멋진 연설문을 써줘
Here's a potential team leader speech for your IT team in Korean:

---

**환영, 팀!**

저는 이날 처음으로 IT팀의 팀장이 되어 честь을 받은 것입니다. 함께 일하게 될 각자에게 고마워하는 기회를 가질 수 있습니다. 저는 이렇게 팀을 이끌어갈 수 있는 영광을 느끼고 있습니다.

** 우리의 사명 :*
우리 팀의 목표는 단순합니다. 이를 달성하기 위해 저는 각자의 강점과 재능을 활용하여 최고의 성과를 내겠습니다. 우리는 개별적으로는 아니라, 함께 일하는 조직체입니다. 기업의 성공을 위한 혁신적인 솔루션을 제공하며, 협동, 창의, 지속적 학습의 문화를 형성하겠습니다.

** 우리의 강점 :*
각자가 가진 Unique Skill, Perspective, Expertise 등을 활용하여 더 큰 것을 만들 수 있습니다. 우리는 소프트웨어 개발부터 지원까지 다양한 업무에 종사할 것입니다. 저는 각자의 재능을 믿고 있습니다.

** 앞으로의 도전 :*
저는 도전이 있을 줄 알아요. 하지만 저는 각자에게 믿음을 갖고 있습니다. 우리는 함께 도전을 맞아내고, collective Wisdom, Creativity, Determination 등을 사용하여 어떤도전이라도 이겨낼 것입니다. 우리는 실수를 통해 성장하고, 더 강한 팀이 될 것입니다.

** 이를 기대할 수 있는 것은 :*
저는 팀 리더로서 다음과 같은 약속을 합니다.
1. **오픈 커뮤니케이션** : 각자의 아이디어, 우려, 제안 등을 들으겠습니다. 각자의 목소리가 들립니다.
2. **클리어 골스** : 우리는 실제적 목표를 설정하여, 누구나 무엇을 위해 일하는지 알 수 있습니다.
3. **서포트 & 리소스** : 저는 각자가 필요한 도구, 교육, 지원 등을 제공할 것입니다.
4. **리코gnition & 레워즈** : 우리는 우리의 성공을 축하하고, 개인적인 공헌을 인정하여 서로를 이끌어갈 것입니다.

** 미래 :*
저는 이제 새로운 챕터에 들어가게 될 것 같습니다. 저는 이 팀이 어떤 것을 성취할지 궁금해합니다. 함께 이룰 수 있는 것은 무엇인지 찾아보겠습니다!

---
I hope this speech is inspiring and motivating for your IT team! Remember to tailor it to your team's specific needs and goals. Good luck with your new role as team 
leader! 🚀
---------------------------------------------------------------------------------------------------------
아래 링크에 ollama로 구동할 수 있는 모델이 나온다. llama3는 8B 4bit quantized 모델로 4.7GB정도 용량이다.

참고로  $ ollama run llama:70b 형태로 70B모델도 구동도 가능하다. 아래 각 모델의 세부 정보를 통해 어떤 형태까지 구동할 수 있는지 태그명을 알 수 있다.

 

https://ollama.com/library/

 

추천하고 싶은 한글이 어느정도 되는 모델들은 아래와 같다

$ ollama run gemma:instruct (한글이 그래도 나온다!)

$ ollama run llama3:instruct (한글로 설명해달라고 하면 제법 한다)

$ ollama run command-r (cohere의 모델인데 20b이지만 한글이 꽤 된다)

$ ollama run codegemma:instruct

 

 

https://ollama.com/library/llama3, 각 세부 모델도 실행가능하다. ex> llama3:70b

 

 

반응형
Posted by 작동미학