Teknologian jakaminen

K8s GPU:n resurssienhallinnan tutkiminen: Suuren tekoälymallin Ollaman käyttöönotto KubeSpheressä

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Tekijä: Käyttö ja ylläpito Youshu Star Master Tekoälyn, koneoppimisen ja tekoälyn suuren malliteknologian nopean kehityksen myötä myös laskentaresurssien kysyntämme kasvaa. Erityisesti suurissa tekoälymalleissa, joissa on käsiteltävä laajamittaista dataa ja monimutkaisia ​​algoritmeja, GPU-resurssien käyttö tulee kriittistä. Käyttö- ja ylläpitoinsinööreille on tullut välttämätön taito hallita ja määrittää GPU-resursseja Kubernetes-klustereissa ja ottaa tehokkaasti käyttöön näihin resursseihin perustuvia sovelluksia.

Tänään opastan sinut saamaan syvällisen ymmärryksen siitä, kuinka Kubernetesin tehokkaan ekosysteemin ja työkalujen avulla voit saavuttaa GPU-resurssien hallinnan ja sovellusten käyttöönoton KubeSphere-alustalla. Tässä on kolme tämän artikkelin pääteemaa:

  1. Klusterin laajennus ja GPU-solmun integrointi: Käytämme KubeKey-työkalua laajentamaan Kubernetes-klusteria ja lisäämään Worker-solmuja GPU-ominaisuuksilla tarjotaksemme tarvittavan laitteistotuen tekoälysovelluksille.
  2. Kubernetes-integraatio GPU-resursseille: Käytä Helmiä NVIDIA GPU Operatorin asentamiseen ja määrittämiseen. Se on NVIDIAn virallisesti tarjoama ratkaisu, joka on suunniteltu yksinkertaistamaan Kubernetes-klustereiden GPU-resurssien kutsumista ja hallintaa.
  3. Käytännön käyttöönotto: Ollama suuri mallinhallintatyökalu: Otamme käyttöön Ollaman, hallintatyökalun, joka on erityisesti suunniteltu suurille tekoälymalleille, KubeSpheressä varmistaaksemme, voidaanko GPU-resurssit ajoittaa oikein ja käyttää tehokkaasti.

Lukemalla tämän artikkelin saat tiedot ja taidot hallita GPU-resursseja Kubernetesissa, mikä auttaa sinua hyödyntämään täysimääräisesti GPU-resursseja pilvipohjaisessa ympäristössä ja edistämään tekoälysovellusten nopeaa kehitystä.

KubeSpheren paras käytäntö "2024" Asiakirjasarjan kokeellisen ympäristön laitteisto- ja ohjelmistotiedot ovat seuraavat:

Todellinen palvelinkokoonpano (arkkitehtuuri 1:1 kopio pienimuotoisesta tuotantoympäristöstä, kokoonpano on hieman erilainen)

CPU:n nimiIPprosessoriMuistijärjestelmälevydatalevykäyttää
ksp-rekisteri192.168.9.904840200Sataman peilivarasto
ksp-control-1192.168.9.914840100KubeSphere/k8s-control-plane
ksp-control-2192.168.9.924840100KubeSphere/k8s-control-plane
ksp-control-3192.168.9.934840100KubeSphere/k8s-control-plane
ksp-työntekijä-1192.168.9.9441640100k8s-työntekijä/CI
ksp-työntekijä-2192.168.9.9541640100k8s-työntekijä
ksp-työläinen-3192.168.9.9641640100k8s-työntekijä
ksp-storage-1192.168.9.974840300+ElasticSearch/Ceph/Longhorn/NFS/
ksp-storage-2192.168.9.984840300+ElasticSearch//Ceph/Longhorn
ksp-tallennus-3192.168.9.994840300+ElasticSearch//Ceph/Longhorn
ksp-gpu-worker-1192.168.9.10141640100k8s-worker (GPU NVIDIA Tesla M40 24G)
ksp-gpu-worker-2192.168.9.10241640100k8s-worker (GPU NVIDIA Tesla P100 16G)
ksp-gateway-1192.168.9.1032440Itse rakennettu sovelluspalvelun välityspalvelinyhdyskäytävä/VIP: 192.168.9.100
ksp-gateway-2192.168.9.1042440Itse rakennettu sovelluspalvelun välityspalvelinyhdyskäytävä/VIP: 192.168.9.100
ksp-mid192.168.9.1054840100Palvelusolmut käyttöön k8s-klusterin ulkopuolella (Gitlab jne.)
kaikki yhteensä15561526002000

Varsinainen taisteluympäristö sisältää ohjelmistoversiotiedot

  • käyttöjärjestelmä:openEuler 22.03 LTS SP3 x86_64
  • KubeSphere:v3.4.1
  • Kubernetes:v1.28.8
  • KubeKey: v3.1.1
  • Kontti:1.7.13
  • NVIDIA GPU-operaattori:v24.3.0
  • NVIDIA-näytönohjaimen ohjain:550.54.15

1. Edellytykset

1.1 Valmistele Worker-solmut näytönohjainkorteilla

Resurssi- ja kustannusrajoitusten vuoksi minulla ei ole huippuluokan fyysistä isäntä- ja näytönohjainkorttia kokeillakseni. Vain kaksi virtuaalikonetta, jotka on varustettu lähtötason GPU-näytönohjaimella, voidaan lisätä klusterin työsolmuiksi.

  • Node 1 on määritetty GPU NVIDIA Tesla M40 24G -näytönohjaimella. Ainoa etu on 24 Gt suuri videomuisti ja alhainen suorituskyky.
  • Node 2 on määritetty GPU NVIDIA Tesla P100 16G -näytönohjaimella. Grafiikkamuisti on pieni, mutta nopeus on nopeampi kuin M40, P40 ja muut näytönohjaimet.

Vaikka nämä näytönohjaimet eivät ole yhtä tehokkaita kuin huippuluokan mallit, ne ovat riittäviä useimpiin oppimis- ja kehitystehtäviin. Rajallisilla resursseilla tällainen kokoonpano tarjoaa minulle arvokkaita käytännön mahdollisuuksia tutkia syvällisesti Kubernetes-klusterien resursseja aikataulustrategiat.

1.2 Käyttöjärjestelmän alustusasetukset

Katso Kubernetes-klusterisolmu openEuler 22.03 LTS SP3 -järjestelmän alustusopas, viimeistele käyttöjärjestelmän alustusasetukset.

Alkumääritysopas ei sisällä käyttöjärjestelmän päivitystehtäviä. Kun alustat järjestelmää Internet-yhteydellä varustetussa ympäristössä, sinun on päivitettävä käyttöjärjestelmä ja käynnistettävä sitten solmu uudelleen.

2. Laajenna GPU Worker -solmuja KubeKeyllä

Seuraavaksi lisäämme äskettäin lisätyn GPU-solmun olemassa olevaan Kubernetes-klusteriin KubeKeyn avulla. Koko prosessi on suhteellisen yksinkertainen ja vaatii vain kaksi vaihetta.

  • Muokkaa KubeKeyn käyttöönoton yhteydessä käytettyä klusterin määritystiedostoa
  • Suorita komento lisätäksesi solmuja

2.1 Muokkaa klusterin määritystiedostoa

Vaihda Control-1-solmussa kubekey-hakemistoon käyttöönottoa varten ja muokkaa alkuperäistä klusterin määritystiedostoa Varsinaisessa taistelussa käyttämämme nimi ksp-v341-v1288.yaml, muuta sitä todellisen tilanteen mukaan.

Tärkeimmät muutoskohdat:

  • spec.hosts-osio: Lisää uudet työntekijäsolmun tiedot.
  • spec.roleGroups.worker-osio: Lisää uudet työntekijäsolmun tiedot

Muokattu esimerkki on seuraava:

apiVersion: kubekey.kubesphere.io/v1alpha2
kind: Cluster
metadata:
  name: opsxlab
spec:
  hosts:
  ......(保持不变)
  - {name: ksp-gpu-worker-1, address: 192.168.9.101, internalAddress: 192.168.9.101, user: root, password: "OpsXlab@2024"}
  - {name: ksp-gpu-worker-2, address: 192.168.9.102, internalAddress: 192.168.9.102, user: root, password: "OpsXlab@2024"}
  roleGroups:
    ......(保持不变)
    worker:
    ......(保持不变)
    - ksp-gpu-worker-1
    - ksp-gpu-worker-2

# 下面的内容保持不变
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

2.2 Käytä KubeKeyä solmujen lisäämiseen

Ennen kuin lisäät solmuja, vahvistetaan nykyisen klusterin solmutiedot.

$ kubectl get nodes -o wide
NAME            STATUS   ROLES           AGE   VERSION   INTERNAL-IP    EXTERNAL-IP   OS-IMAGE                    KERNEL-VERSION                       CONTAINER-RUNTIME
ksp-control-1   Ready    control-plane   24h   v1.28.8   192.168.9.91   <none>        openEuler 22.03 (LTS-SP3)   5.10.0-182.0.0.95.oe2203sp3.x86_64   containerd://1.7.13
ksp-control-2   Ready    control-plane   24h   v1.28.8   192.168.9.92   <none>        openEuler 22.03 (LTS-SP3)   5.10.0-182.0.0.95.oe2203sp3.x86_64   containerd://1.7.13
ksp-control-3   Ready    control-plane   24h   v1.28.8   192.168.9.93   <none>        openEuler 22.03 (LTS-SP3)   5.10.0-182.0.0.95.oe2203sp3.x86_64   containerd://1.7.13
ksp-worker-1    Ready    worker          24h   v1.28.8   192.168.9.94   <none>        openEuler 22.03 (LTS-SP3)   5.10.0-182.0.0.95.oe2203sp3.x86_64   containerd://1.7.13
ksp-worker-2    Ready    worker          24h   v1.28.8   192.168.9.95   <none>        openEuler 22.03 (LTS-SP3)   5.10.0-182.0.0.95.oe2203sp3.x86_64   containerd://1.7.13
ksp-worker-3    Ready    worker          24h   v1.28.8   192.168.9.96   <none>        openEuler 22.03 (LTS-SP3)   5.10.0-182.0.0.95.oe2203sp3.x86_64   containerd://1.7.13
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

Seuraavaksi suoritamme seuraavan komennon ja lisäämme uuden Worker-solmun klusteriin muokatun määritystiedoston avulla.

export KKZONE=cn
./kk add nodes -f ksp-v341-v1288.yaml
  • 1

Kun yllä oleva komento on suoritettu, KubeKey tarkistaa ensin, vastaavatko Kubernetesin käyttöönoton riippuvuudet ja muut kokoonpanot vaatimukset. Kun olet läpäissyt tarkistuksen, sinua pyydetään vahvistamaan asennus.tulla sisäänJoo ja paina ENTER jatkaaksesi käyttöönottoa.

Käyttöönoton suorittaminen kestää noin 5 minuuttia. Aika riippuu verkon nopeudesta, koneen kokoonpanosta ja lisättyjen solmujen määrästä.

Kun käyttöönotto on valmis, sinun pitäisi nähdä seuraavanlaista tulostetta päätteessäsi.

......
19:29:26 CST [AutoRenewCertsModule] Generate k8s certs renew script
19:29:27 CST success: [ksp-control-2]
19:29:27 CST success: [ksp-control-1]
19:29:27 CST success: [ksp-control-3]
19:29:27 CST [AutoRenewCertsModule] Generate k8s certs renew service
19:29:29 CST success: [ksp-control-3]
19:29:29 CST success: [ksp-control-2]
19:29:29 CST success: [ksp-control-1]
19:29:29 CST [AutoRenewCertsModule] Generate k8s certs renew timer
19:29:30 CST success: [ksp-control-2]
19:29:30 CST success: [ksp-control-1]
19:29:30 CST success: [ksp-control-3]
19:29:30 CST [AutoRenewCertsModule] Enable k8s certs renew service
19:29:30 CST success: [ksp-control-3]
19:29:30 CST success: [ksp-control-2]
19:29:30 CST success: [ksp-control-1]
19:29:30 CST Pipeline[AddNodesPipeline] execute successfully
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

3. Klusterin tilan tarkistus laajennuksen jälkeen

3.1 KubeSphere-hallintakonsoli klusterin tilan tarkistamiseksi

Avaamme selaimen ja käytämme Control-1-solmun IP-osoitetta ja porttia 30880, kirjaudu sisään KubeSphere-hallintakonsolin kirjautumissivulle.

Siirry klusterinhallintaliittymään, napsauta vasemmalla olevaa "Solmu"-valikkoa ja napsauta "Cluster Node" nähdäksesi yksityiskohtaiset tiedot Kubernetes-klusterin käytettävissä olevista solmuista.

3.2 Kubectl-komentorivi klusterin tilan tarkistamiseksi

  • Näytä klusterin solmutiedot

Suorita kubectl-komento Control-1-solmussa saadaksesi Kubernetes-klusterin solmutiedot.

kubectl get nodes -o wide

    Kuten tulosteessa näkyy, nykyisessä Kubernetes-klusterissa on 8 solmua, ja kunkin solmun nimi, tila, rooli, selviytymisaika, Kubernetes-versionumero, sisäinen IP, käyttöjärjestelmän tyyppi, ytimen versio ja säilön ajonaika näytetään yksityiskohtaisesti. ja muuta tietoa.

    $ kubectl get nodes -o wide
    NAME               STATUS     ROLES           AGE   VERSION   INTERNAL-IP     EXTERNAL-IP   OS-IMAGE                    KERNEL-VERSION                        CONTAINER-RUNTIME
    ksp-control-1      Ready      control-plane   25h   v1.28.8   192.168.9.91    <none>        openEuler 22.03 (LTS-SP3)   5.10.0-182.0.0.95.oe2203sp3.x86_64    containerd://1.7.13
    ksp-control-2      Ready      control-plane   25h   v1.28.8   192.168.9.92    <none>        openEuler 22.03 (LTS-SP3)   5.10.0-182.0.0.95.oe2203sp3.x86_64    containerd://1.7.13
    ksp-control-3      Ready      control-plane   25h   v1.28.8   192.168.9.93    <none>        openEuler 22.03 (LTS-SP3)   5.10.0-182.0.0.95.oe2203sp3.x86_64    containerd://1.7.13
    ksp-gpu-worker-1   Ready      worker          59m   v1.28.8   192.168.9.101   <none>        openEuler 22.03 (LTS-SP3)   5.10.0-199.0.0.112.oe2203sp3.x86_64   containerd://1.7.13
    ksp-gpu-worker-2   Ready      worker          59m   v1.28.8   192.168.9.102   <none>        openEuler 22.03 (LTS-SP3)   5.10.0-199.0.0.112.oe2203sp3.x86_64   containerd://1.7.13
    ksp-worker-1       Ready      worker          25h   v1.28.8   192.168.9.94    <none>        openEuler 22.03 (LTS-SP3)   5.10.0-182.0.0.95.oe2203sp3.x86_64    containerd://1.7.13
    ksp-worker-2       Ready      worker          25h   v1.28.8   192.168.9.95    <none>        openEuler 22.03 (LTS-SP3)   5.10.0-182.0.0.95.oe2203sp3.x86_64    containerd://1.7.13
    ksp-worker-3       Ready      worker          25h   v1.28.8   192.168.9.96    <none>        openEuler 22.03 (LTS-SP3)   5.10.0-182.0.0.95.oe2203sp3.x86_64    containerd://1.7.13
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    Tässä vaiheessa olemme saaneet päätökseen kaikki tehtävät, jotka liittyvät Kubekeyn avulla 2 Worker-solmun lisäämiseen olemassa olevaan Kubernetes-klusteriin, joka koostuu 3 pääsolmusta ja 3 Worker-solmusta.

    Seuraavaksi asennamme NVIDIA:n virallisesti tuottaman NVIDIA GPU Operatorin toteuttaaksemme K8s Scheduling Podin käyttämään GPU-resursseja.

    4. Asenna ja määritä NVIDIA GPU Operator

    4.1 Asenna NVIDIA-näytönohjaimen ohjain

    NVIDIA GPU Operator tukee näytönohjaimen automaattista asennusta, mutta vain CentOS 7, 8 ja Ubuntu 20.04, 22.04 ja muut versiot eivät tue openEuleria, joten sinun on asennettava näytönohjain manuaalisesti.

    Katso KubeSpheren paras käytäntö: openEuler 22.03 LTS SP3 asentaa NVIDIA-näytönohjaimen ohjaimen, viimeistele näytönohjaimen ohjaimen asennus.

    4.2 Edellytykset

    Node Feature Discovery (NFD) havaitsee ominaisuuksien tarkistukset.

     $ kubectl get nodes -o json | jq '.items[].metadata.labels | keys | any(startswith("feature.node.kubernetes.io"))'

      Yllä olevan komennon suoritustulos on true, havainnollistaa NFD Käynnissä jo klusterissa. Jos NFD on jo käynnissä klusterissa, NFD:n käyttöönotto on poistettava käytöstä operaattoria asennettaessa.

      havainnollistaa: KubeSpheren avulla käyttöön otetut K8s-klusterit eivät asenna ja määritä NFD:tä oletusarvoisesti.

      4.3 Asenna NVIDIA GPU Operator

      1. Lisää NVIDIA Helm -arkisto
      helm repo add nvidia https://helm.ngc.nvidia.com/nvidia && helm repo update
        1. Asenna GPU Operator

        Käytä oletusasetustiedostoa, poista näytönohjaimen ohjainten automaattinen asennus käytöstä ja asenna GPU-operaattori.

        helm install -n gpu-operator --create-namespace gpu-operator nvidia/gpu-operator --set driver.enabled=false

          Huomautus: Koska asennettu kuva on suhteellisen suuri, ensimmäisen asennuksen aikana voi tapahtua aikakatkaisu. Tarkista, onko kuvasi vedetty onnistuneesti. Voit harkita offline-asennuksen käyttöä tämän tyyppisen ongelman ratkaisemiseksi.

          1. Asenna GPU-operaattori mukautetuilla arvoilla (Valinnainen, käytetään offline-tilassa tai mukautettuja määrityksiä varten
          helm install -f gpu-operator-values.yaml -n gpu-operator --create-namespace gpu-operator nvidia/gpu-operator --set driver.enabled=false

            Oikean suorituksen tulos on seuraava:

            $ helm install -n gpu-operator --create-namespace gpu-operator nvidia/gpu-operator --set driver.enabled=false
            NAME: gpu-operator
            LAST DEPLOYED: Tue Jul  2 21:40:29 2024
            NAMESPACE: gpu-operator
            STATUS: deployed
            REVISION: 1
            TEST SUITE: None
            • 1
            • 2
            • 3
            • 4
            • 5
            • 6

            4.4 Tarkista GPU-operaattorin käyttöönottotila komentorivin avulla

            Kun olet suorittanut GPU-operaattorin asennuskomennon, odota kärsivällisesti, kunnes kaikki kuvat on vedetty onnistuneesti ja kaikki Podit ovat käynnissä-tilassa.

            1. Tarkista podien tila komentoriviltä
            $ kubectl get pods -n gpu-operator
            NAME                                                          READY   STATUS      RESTARTS   AGE
            gpu-feature-discovery-czdf5                                   1/1     Running     0          15m
            gpu-feature-discovery-q9qlm                                   1/1     Running     0          15m
            gpu-operator-67c68ddccf-x29pm                                 1/1     Running     0          15m
            gpu-operator-node-feature-discovery-gc-57457b6d8f-zjqhr       1/1     Running     0          15m
            gpu-operator-node-feature-discovery-master-5fb74ff754-fzbzm   1/1     Running     0          15m
            gpu-operator-node-feature-discovery-worker-68459              1/1     Running     0          15m
            gpu-operator-node-feature-discovery-worker-74ps5              1/1     Running     0          15m
            gpu-operator-node-feature-discovery-worker-dpmg9              1/1     Running     0          15m
            gpu-operator-node-feature-discovery-worker-jvk4t              1/1     Running     0          15m
            gpu-operator-node-feature-discovery-worker-k5kwq              1/1     Running     0          15m
            gpu-operator-node-feature-discovery-worker-ll4bk              1/1     Running     0          15m
            gpu-operator-node-feature-discovery-worker-p4q5q              1/1     Running     0          15m
            gpu-operator-node-feature-discovery-worker-rmk99              1/1     Running     0          15m
            nvidia-container-toolkit-daemonset-9zcnj                      1/1     Running     0          15m
            nvidia-container-toolkit-daemonset-kcz9g                      1/1     Running     0          15m
            nvidia-cuda-validator-l8vjb                                   0/1     Completed   0          14m
            nvidia-cuda-validator-svn2p                                   0/1     Completed   0          13m
            nvidia-dcgm-exporter-9lq4c                                    1/1     Running     0          15m
            nvidia-dcgm-exporter-qhmkg                                    1/1     Running     0          15m
            nvidia-device-plugin-daemonset-7rvfm                          1/1     Running     0          15m
            nvidia-device-plugin-daemonset-86gx2                          1/1     Running     0          15m
            nvidia-operator-validator-csr2z                               1/1     Running     0          15m
            nvidia-operator-validator-svlc4                               1/1     Running     0          15m
            • 1
            • 2
            • 3
            • 4
            • 5
            • 6
            • 7
            • 8
            • 9
            • 10
            • 11
            • 12
            • 13
            • 14
            • 15
            • 16
            • 17
            • 18
            • 19
            • 20
            • 21
            • 22
            • 23
            • 24
            1. Tarkastele GPU-resursseja, jotka solmu voi varata
            $ kubectl describe node ksp-gpu-worker-1 | grep "^Capacity" -A 7
            Capacity:
              cpu:                4
              ephemeral-storage:  35852924Ki
              hugepages-1Gi:      0
              hugepages-2Mi:      0
              memory:             15858668Ki
              nvidia.com/gpu:     1
              pods:               110
            • 1
            • 2
            • 3
            • 4
            • 5
            • 6
            • 7
            • 8

            havainnollistaa: Keskitynvidia.com/gpu: Kentän arvo.

            4.5 Tarkista GPU-operaattorin käyttöönottotila KubeSphere-konsolissa

            Onnistuneesti luotu työmäärä on seuraava:

            • Käyttöönotot

            • Daemonsetit

            5. GPU:n toimintavarmennustesti

            5.1 Testiesimerkki 1 - Varmistustesti CUDA

            Kun GPU-operaattori on asennettu oikein, testaa CUDA-peruskuvan avulla, voivatko K8:t luoda GPU-resursseja käyttäviä podeja oikein.

            1. Luo resurssiluettelotiedosto,vi cuda-ubuntu.yaml
            apiVersion: v1
            kind: Pod
            metadata:
              name: cuda-ubuntu2204
            spec:
              restartPolicy: OnFailure
              containers:
              - name: cuda-ubuntu2204
                image: "nvcr.io/nvidia/cuda:12.4.0-base-ubuntu22.04"
                resources:
                  limits:
                    nvidia.com/gpu: 1
                command: ["nvidia-smi"]
            • 1
            • 2
            • 3
            • 4
            • 5
            • 6
            • 7
            • 8
            • 9
            • 10
            • 11
            • 12
            1. Luo resursseja
            kubectl apply -f cuda-ubuntu.yaml
              1. Katso luodut resurssit

              Tuloksista voit nähdä, että pod luotiin ksp-gpu-worker-2-solmuun (Node-näytönohjaimen malli Tesla P100-PCIE-16GB)。

              $ kubectl get pods -o wide
              NAME                      READY   STATUS      RESTARTS   AGE   IP             NODE               NOMINATED NODE   READINESS GATES
              cuda-ubuntu2204           0/1     Completed   0          73s   10.233.99.15   ksp-gpu-worker-2   <none>           <none>
              ollama-79688d46b8-vxmhg   1/1     Running     0          47m   10.233.72.17   ksp-gpu-worker-1   <none>           <none>
              • 1
              • 2
              • 3
              1. Näytä Pod-lokit
              kubectl logs pod/cuda-ubuntu2204

                Oikean suorituksen tulos on seuraava:

                $ kubectl logs pod/cuda-ubuntu2204
                Mon Jul  8 11:10:59 2024
                +-----------------------------------------------------------------------------------------+
                | NVIDIA-SMI 550.54.15              Driver Version: 550.54.15      CUDA Version: 12.4     |
                |-----------------------------------------+------------------------+----------------------+
                | 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  Tesla P100-PCIE-16GB           Off |   00000000:00:10.0 Off |                    0 |
                | N/A   40C    P0             26W /  250W |       0MiB /  16384MiB |      0%      Default |
                |                                         |                        |                  N/A |
                +-----------------------------------------+------------------------+----------------------+
                
                +-----------------------------------------------------------------------------------------+
                | Processes:                                                                              |
                |  GPU   GI   CI        PID   Type   Process name                              GPU Memory |
                |        ID   ID                                                               Usage      |
                |=========================================================================================|
                |  No running processes found                                                             |
                +-----------------------------------------------------------------------------------------+
                • 1
                • 2
                • 3
                • 4
                • 5
                • 6
                • 7
                • 8
                • 9
                • 10
                • 11
                • 12
                • 13
                • 14
                • 15
                • 16
                • 17
                • 18
                • 19
                • 20
                1. Puhdista testiresurssit
                kubectl apply -f cuda-ubuntu.yaml

                  5.2 Testiesimerkki 2 - Esimerkki virallisista GPU-sovelluksista

                  Toteuta yksinkertainen CUDA-esimerkki kahden vektorin lisäämiseksi.

                  1. Luo resurssiluettelotiedosto,vi cuda-vectoradd.yaml
                  apiVersion: v1
                  kind: Pod
                  metadata:
                    name: cuda-vectoradd
                  spec:
                    restartPolicy: OnFailure
                    containers:
                    - name: cuda-vectoradd
                      image: "nvcr.io/nvidia/k8s/cuda-sample:vectoradd-cuda11.7.1-ubuntu20.04"
                      resources:
                        limits:
                          nvidia.com/gpu: 1
                  • 1
                  • 2
                  • 3
                  • 4
                  • 5
                  • 6
                  • 7
                  • 8
                  • 9
                  • 10
                  • 11
                  1. Suorita komento luodaksesi Pod
                  $ kubectl apply -f cuda-vectoradd.yaml
                    1. Näytä Pod-suoritustulokset

                    Pod on luotu onnistuneesti ja toimii käynnistyksen jälkeen. vectorAdd komento ja poistu.

                    $ kubectl logs pod/cuda-vectoradd

                      Oikean suorituksen tulos on seuraava:

                      [Vector addition of 50000 elements]
                      Copy input data from the host memory to the CUDA device
                      CUDA kernel launch with 196 blocks of 256 threads
                      Copy output data from the CUDA device to the host memory
                      Test PASSED
                      Done
                      • 1
                      • 2
                      • 3
                      • 4
                      • 5
                      1. Puhdista testiresurssit
                      kubectl delete -f cuda-vectoradd.yaml

                        6. KubeSphere ottaa käyttöön Ollaman

                        Yllä olevan varmistustestin avulla on todistettu, että GPU:ta käyttävät Pod-resurssit voidaan luoda K8s-klusteriin. Seuraavaksi käytämme KubeSphereä suuren mallinhallintatyökalun Ollaman luomiseen K8s-klusteriin todellisten käyttövaatimusten perusteella.

                        6.1 Luo käyttöönottoresurssiluettelo

                        Tämä esimerkki on yksinkertainen testi, ja tallennustila valitaan hostPath Tila, vaihda se tallennusluokkaan tai muun tyyppiseen jatkuvaan tallennustilaan todellisessa käytössä.

                        1. Luo resurssiluettelo,vi deploy-ollama.yaml
                        kind: Deployment
                        apiVersion: apps/v1
                        metadata:
                          name: ollama
                          namespace: default
                          labels:
                            app: ollama
                        spec:
                          replicas: 1
                          selector:
                            matchLabels:
                              app: ollama
                          template:
                            metadata:
                              labels:
                                app: ollama
                            spec:
                              volumes:
                                - name: ollama-models
                                  hostPath:
                                    path: /data/openebs/local/ollama
                                    type: ''
                                - name: host-time
                                  hostPath:
                                    path: /etc/localtime
                                    type: ''
                              containers:
                                - name: ollama
                                  image: 'ollama/ollama:latest'
                                  ports:
                                    - name: http-11434
                                      containerPort: 11434
                                      protocol: TCP
                                  resources:
                                    limits:
                                      nvidia.com/gpu: '1'
                                    requests:
                                      nvidia.com/gpu: '1'
                                  volumeMounts:
                                    - name: ollama-models
                                      mountPath: /root/.ollama
                                    - name: host-time
                                      readOnly: true
                                      mountPath: /etc/localtime
                                  imagePullPolicy: IfNotPresent
                              restartPolicy: Always
                        ---
                        kind: Service
                        apiVersion: v1
                        metadata:
                          name: ollama
                          namespace: default
                          labels:
                            app: ollama
                        spec:
                          ports:
                            - name: http-11434
                              protocol: TCP
                              port: 11434
                              targetPort: 11434
                              nodePort: 31434
                          selector:
                            app: ollama
                          type: NodePort
                        • 1
                        • 2
                        • 3
                        • 4
                        • 5
                        • 6
                        • 7
                        • 8
                        • 9
                        • 10
                        • 11
                        • 12
                        • 13
                        • 14
                        • 15
                        • 16
                        • 17
                        • 18
                        • 19
                        • 20
                        • 21
                        • 22
                        • 23
                        • 24
                        • 25
                        • 26
                        • 27
                        • 28
                        • 29
                        • 30
                        • 31
                        • 32
                        • 33
                        • 34
                        • 35
                        • 36
                        • 37
                        • 38
                        • 39
                        • 40
                        • 41
                        • 42
                        • 43
                        • 44
                        • 45
                        • 46
                        • 47
                        • 48
                        • 49
                        • 50
                        • 51
                        • 52
                        • 53
                        • 54
                        • 55
                        • 56
                        • 57
                        • 58
                        • 59
                        • 60
                        • 61
                        • 62
                        • 63

                        Erityisohjeet: KubeSpheren hallintakonsoli tukee käyttöönoton ja muiden resurssien graafista määritystä GPU-resurssien käyttöä varten. Kiinnostuneet ystävät voivat opiskella itse.

                        6.2 Ota Ollama-palvelu käyttöön

                        • Luo Ollama
                        kubectl apply -f deploy-ollama.yaml
                          • Näytä pod-luonnin tulokset

                          Tuloksista näet, että pod luotiin solmuun ksp-gpu-worker-1 (Node-näytönohjaimen malli Tesla M40 24GB)。

                          $ kubectl get pods -o wide
                          NAME                      READY   STATUS    RESTARTS   AGE   IP             NODE               NOMINATED NODE   READINESS GATES
                          k   1/1     Running   0          12s   10.233.72.17   ksp-gpu-worker-1   <none>           <none>
                          • 1
                          • 2
                          • Näytä säilöloki
                          [root@ksp-control-1 ~]# kubectl logs ollama-79688d46b8-vxmhg
                          2024/07/08 18:24:27 routes.go:1064: INFO server config env="map[CUDA_VISIBLE_DEVICES: GPU_DEVICE_ORDINAL: HIP_VISIBLE_DEVICES: HSA_OVERRIDE_GFX_VERSION: OLLAMA_DEBUG:false OLLAMA_FLASH_ATTENTION:false OLLAMA_HOST:http://0.0.0.0:11434 OLLAMA_INTEL_GPU:false OLLAMA_KEEP_ALIVE: OLLAMA_LLM_LIBRARY: OLLAMA_MAX_LOADED_MODELS:1 OLLAMA_MAX_QUEUE:512 OLLAMA_MAX_VRAM:0 OLLAMA_MODELS:/root/.ollama/models OLLAMA_NOHISTORY:false OLLAMA_NOPRUNE:false OLLAMA_NUM_PARALLEL:1 OLLAMA_ORIGINS:[http://localhost https://localhost http://localhost:* https://localhost:* http://127.0.0.1 https://127.0.0.1 http://127.0.0.1:* https://127.0.0.1:* http://0.0.0.0 https://0.0.0.0 http://0.0.0.0:* https://0.0.0.0:* app://* file://* tauri://*] OLLAMA_RUNNERS_DIR: OLLAMA_SCHED_SPREAD:false OLLAMA_TMPDIR: ROCR_VISIBLE_DEVICES:]"
                          time=2024-07-08T18:24:27.829+08:00 level=INFO source=images.go:730 msg="total blobs: 5"
                          time=2024-07-08T18:24:27.829+08:00 level=INFO source=images.go:737 msg="total unused blobs removed: 0"
                          time=2024-07-08T18:24:27.830+08:00 level=INFO source=routes.go:1111 msg="Listening on [::]:11434 (version 0.1.48)"
                          time=2024-07-08T18:24:27.830+08:00 level=INFO source=payload.go:30 msg="extracting embedded files" dir=/tmp/ollama2414166698/runners
                          time=2024-07-08T18:24:32.454+08:00 level=INFO source=payload.go:44 msg="Dynamic LLM libraries [cpu cpu_avx cpu_avx2 cuda_v11 rocm_v60101]"
                          time=2024-07-08T18:24:32.567+08:00 level=INFO source=types.go:98 msg="inference compute" id=GPU-9e48dc13-f8f1-c6bb-860f-c82c96df22a4 library=cuda compute=5.2 driver=12.4 name="Tesla M40 24GB" total="22.4 GiB" available="22.3 GiB"
                          • 1
                          • 2
                          • 3
                          • 4
                          • 5
                          • 6
                          • 7

                          6.3 Vedä Ollan käyttämä iso malli

                          • Ollama vetomalli

                          Ajan säästämiseksi tässä esimerkissä testimallina käytetään Alibaban avoimen lähdekoodin qwen2 1.5b pienikokoista mallia.

                          kubectl exec -it ollama-79688d46b8-vxmhg -- ollama pull qwen2:1.5b

                            Oikean suorituksen tulos on seuraava:

                            [root@ksp-control-1 ~]# kubectl exec -it ollama-79688d46b8-vxmhg -- ollama pull qwen2:1.5b
                            pulling manifest
                            pulling 405b56374e02... 100% ▕█████████████████████████████████████████████████████▏ 934 MB
                            pulling 62fbfd9ed093... 100% ▕█████████████████████████████████████████████████████▏  182 B
                            pulling c156170b718e... 100% ▕█████████████████████████████████████████████████████▏  11 KB
                            pulling f02dd72bb242... 100% ▕█████████████████████████████████████████████████████▏   59 B
                            pulling c9f5e9ffbc5f... 100% ▕█████████████████████████████████████████████████████▏  485 B
                            verifying sha256 digest
                            writing manifest
                            removing any unused layers
                            success
                            • 1
                            • 2
                            • 3
                            • 4
                            • 5
                            • 6
                            • 7
                            • 8
                            • 9
                            • 10
                            • Näytä mallitiedoston sisältö

                            olla olemassa ksp-gpu-worker-1 Solmu suorittaa seuraavan näkymäkomennon

                            $ ls -R /data/openebs/local/ollama/
                            /data/openebs/local/ollama/:
                            id_ed25519  id_ed25519.pub  models
                            
                            /data/openebs/local/ollama/models:
                            blobs  manifests
                            
                            /data/openebs/local/ollama/models/blobs:
                            sha256-405b56374e02b21122ae1469db646be0617c02928fd78e246723ebbb98dbca3e
                            sha256-62fbfd9ed093d6e5ac83190c86eec5369317919f4b149598d2dbb38900e9faef
                            sha256-c156170b718ec29139d3653d40ed1986fd92fb7e0959b5c71f3c48f62e6636f4
                            sha256-c9f5e9ffbc5f14febb85d242942bd3d674a8e4c762aaab034ec88d6ba839b596
                            sha256-f02dd72bb2423204352eabc5637b44d79d17f109fdb510a7c51455892aa2d216
                            
                            /data/openebs/local/ollama/models/manifests:
                            registry.ollama.ai
                            
                            /data/openebs/local/ollama/models/manifests/registry.ollama.ai:
                            library
                            
                            /data/openebs/local/ollama/models/manifests/registry.ollama.ai/library:
                            qwen2
                            
                            /data/openebs/local/ollama/models/manifests/registry.ollama.ai/library/qwen2:
                            1.5b
                            • 1
                            • 2
                            • 3
                            • 4
                            • 5
                            • 6
                            • 7
                            • 8
                            • 9
                            • 10
                            • 11
                            • 12
                            • 13
                            • 14
                            • 15
                            • 16
                            • 17
                            • 18
                            • 19
                            • 20
                            • 21
                            • 22
                            • 23
                            • 24

                            6.4 Mallin kykytesti

                            • Puheluliittymän testi
                            curl http://192.168.9.91:31434/api/chat -d '{
                              "model": "qwen2:1.5b",
                              "messages": [
                                { "role": "user", "content": "用20个字,介绍你自己" }
                              ]
                            }'
                            • 1
                            • 2
                            • 3
                            • 4
                            • 5
                            • Testitulokset
                            $ curl http://192.168.9.91:31434/api/chat -d '{
                              "model": "qwen2:1.5b",
                              "messages": [
                                { "role": "user", "content": "用20个字,介绍你自己" }
                              ]
                            }'
                            {"model":"qwen2:1.5b","created_at":"2024-07-08T09:54:48.011798927Z","message":{"role":"assistant","content":"我"},"done":false}
                            {"model":"qwen2:1.5b","created_at":"2024-07-08T09:54:48.035291669Z","message":{"role":"assistant","content":"是一个"},"done":false}
                            {"model":"qwen2:1.5b","created_at":"2024-07-08T09:54:48.06360233Z","message":{"role":"assistant","content":"人工智能"},"done":false}
                            {"model":"qwen2:1.5b","created_at":"2024-07-08T09:54:48.092411266Z","message":{"role":"assistant","content":"助手"},"done":false}
                            {"model":"qwen2:1.5b","created_at":"2024-07-08T09:54:48.12016935Z","message":{"role":"assistant","content":","},"done":false}
                            {"model":"qwen2:1.5b","created_at":"2024-07-08T09:54:48.144921623Z","message":{"role":"assistant","content":"专注于"},"done":false}
                            {"model":"qwen2:1.5b","created_at":"2024-07-08T09:54:48.169803961Z","message":{"role":"assistant","content":"提供"},"done":false}
                            {"model":"qwen2:1.5b","created_at":"2024-07-08T09:54:48.194796364Z","message":{"role":"assistant","content":"信息"},"done":false}
                            {"model":"qwen2:1.5b","created_at":"2024-07-08T09:54:48.21978104Z","message":{"role":"assistant","content":"和"},"done":false}
                            {"model":"qwen2:1.5b","created_at":"2024-07-08T09:54:48.244976103Z","message":{"role":"assistant","content":"帮助"},"done":false}
                            {"model":"qwen2:1.5b","created_at":"2024-07-08T09:54:48.270233992Z","message":{"role":"assistant","content":"。"},"done":false}
                            {"model":"qwen2:1.5b","created_at":"2024-07-08T09:54:48.29548561Z","message":{"role":"assistant","content":""},"done_reason":"stop","done":true,"total_duration":454377627,"load_duration":1535754,"prompt_eval_duration":36172000,"eval_count":12,"eval_duration":287565000}
                            • 1
                            • 2
                            • 3
                            • 4
                            • 5
                            • 6
                            • 7
                            • 8
                            • 9
                            • 10
                            • 11
                            • 12
                            • 13
                            • 14
                            • 15
                            • 16
                            • 17

                            6.5 Näytä GPU-allokointitiedot

                            • Tarkastele Worker-solmun allokoituja GPU-resursseja
                            $ kubectl describe node ksp-gpu-worker-1 | grep "Allocated resources" -A 9
                            Allocated resources:
                              (Total limits may be over 100 percent, i.e., overcommitted.)
                              Resource           Requests        Limits
                              --------           --------        ------
                              cpu                487m (13%)      2 (55%)
                              memory             315115520 (2%)  800Mi (5%)
                              ephemeral-storage  0 (0%)          0 (0%)
                              hugepages-1Gi      0 (0%)          0 (0%)
                              hugepages-2Mi      0 (0%)          0 (0%)
                              nvidia.com/gpu     1               1
                            • 1
                            • 2
                            • 3
                            • 4
                            • 5
                            • 6
                            • 7
                            • 8
                            • 9
                            • 10
                            • Ollama runtime fyysisen GPU:n käyttö

                            Suorita Worker-solmussa nvidia-smi -l Tarkkaile GPU:n käyttöä.

                            Vastuuvapauslauseke:

                            • Kirjoittajan taso on rajallinen, vaikka hän on käynyt läpi monia tarkistuksia ja yrittänyt parhaansa varmistaakseen sisällön tarkkuuden.Puutteita voi kuitenkin vielä olla . Voit vapaasti antaa meille neuvoja alan asiantuntijoilta.
                            • Tässä artikkelissa kuvattu sisältö on todennettu ja testattu vain todellisissa taisteluympäristöissä. Lukijat voivat oppia ja oppia siitäSen käyttö suoraan tuotantoympäristössä on ehdottomasti kiellettyKirjoittaja ei ole vastuussa tämän aiheuttamista ongelmista

                            Tämän artikkelin on julkaissut Blog One Post Multi-Publishing Platform OpenWrite vapauttaa!