Κοινή χρήση τεχνολογίας

Αρχή και εφαρμογή LoRA -- Η PyTorch χτίζει το μοντέλο LoRA από μόνη της

2024-07-12

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

εισαγωγή

Ένας ειδικός όρος "LoRA" εμφανίζεται συχνά στον τομέα της AIGC. Ακούγεται λίγο σαν το όνομα ενός ατόμου, αλλά είναι μια μέθοδος εκπαίδευσης μοντέλων. Το πλήρες όνομα του LoRA είναι Low-Rank Adaptation of Large Language Models, το οποίο ονομάζεται στα κινέζικαΠροσαρμογή σε χαμηλό επίπεδο μεγάλων γλωσσικών μοντέλων . Σήμερα, χρησιμοποιείται πολύ συχνά σε σταθερή διάχυση.

Λόγω του τεράστιου αριθμού παραμέτρων των μεγάλων γλωσσικών μοντέλων, πολλές μεγάλες εταιρείες πρέπει να εκπαιδεύονται για αρκετούς μήνες. Ως εκ τούτου, έχουν προταθεί διάφορες μέθοδοι εκπαίδευσης με λιγότερη κατανάλωση πόρων και η LoRA είναι μία από αυτές.

Αυτό το άρθρο θα εισαγάγει την αρχή του LoRA λεπτομερώς και θα χρησιμοποιήσει το PyTorch για την υλοποίηση της εκπαίδευσης LoRA μικρών μοντέλων.

2. Πρότυπη εκπαίδευση

Τα περισσότερα μοντέλα εκπαίδευσης χρησιμοποιούν πλέον τον αλγόριθμο gradient descent. Ο αλγόριθμος gradient descent μπορεί να χωριστεί στα ακόλουθα 4 βήματα:

  1. Η μπροστινή διάδοση υπολογίζει την τιμή απώλειας
  2. Η οπίσθια διάδοση υπολογίζει τις κλίσεις
  3. Ενημερώστε τις παραμέτρους χρησιμοποιώντας διαβαθμίσεις
  4. Επαναλάβετε τα βήματα 1, 2 και 3 μέχρι να επιτευχθεί μικρότερη απώλεια

Λαμβάνοντας ως παράδειγμα το γραμμικό μοντέλο, οι παράμετροι του μοντέλου είναι W, η είσοδος και η έξοδος είναι x, y και η συνάρτηση απώλειας είναι το μέσο τετραγωνικό σφάλμα. Στη συνέχεια, ο υπολογισμός κάθε βήματος είναι ως εξής. Το πρώτο είναι η διάδοση προς τα εμπρός για γραμμικά μοντέλα.

L=MSE(Wx,y)L = MSE(Wx, y)L=MSE(Wx,y)

Μετά την εύρεση της απώλειας, η κλίση L έναντι W μπορεί να υπολογιστεί για να ληφθεί dW:

dW=∂L∂WdW = frac{μερικό L}{μερικό W}dW=∂W∂L​

Το dW είναι ένας πίνακας που δείχνει προς την κατεύθυνση όπου το L ανεβαίνει πιο γρήγορα, αλλά ο στόχος μας είναι να κάνουμε το L να πέσει, οπότε έστω το W μείον dW. Για την προσαρμογή του ρυθμού των ενημερώσεων, πολλαπλασιάζεται επίσης ένας ρυθμός εκμάθησης η, ο οποίος υπολογίζεται ως εξής:

W′=W−ηdWW' = W - ηdWW′=W−ηdW

Επαναλάβετε όλη την ώρα στο τέλος. Ο ψευδοκώδικας για τα παραπάνω τρία βήματα είναι ο εξής:

# 4、重复1、2、3
for i in range(10000):
    # 1、正向传播计算损失
    L = MSE(Wx, y)
    # 2、反向传播计算梯度
    dW = gradient(L, W)
    # 3、利用梯度更新参数
    W -= lr * dW

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

Αφού ολοκληρωθεί η ενημέρωση, λαμβάνεται η νέα παράμετρος W'. Όταν χρησιμοποιούμε την πρόβλεψη μοντέλου αυτή τη στιγμή, ο υπολογισμός είναι ως εξής:

pred=W′xpred = W'xpred=W′x

3. Παρουσιάζοντας το LoRA

Μπορούμε να σκεφτούμε τη σχέση μεταξύ W και W'. Το W αναφέρεται συνήθως στις παραμέτρους του βασικού μοντέλου και το W' λαμβάνεται μετά από πολλές προσθήκες και αφαιρέσεις πίνακα με βάση το βασικό μοντέλο. Ας υποθέσουμε ότι ενημερώνεται 10 φορές κατά τη διάρκεια της εκπαιδευτικής διαδικασίας και κάθε φορά που το dW είναι dW1, dW2,..., dW10, τότε η πλήρης διαδικασία ενημέρωσης μπορεί να γραφτεί ως μία λειτουργία:

W′=W−ηdW1−ηdW2−…−ηdW10 Έστω: dW=∑i=110dWiW′=W−ηdWW' = W - ηdW_1 - ηdW_2 - … - ηdW_{10} \ Έστω: dW = άθροισμα_{i=1} ^{10}dW_i \ W' = W - ηdW W′=W−ηdW1​−ηdW2​−…−ηdW10​Έστω: dW=i=1∑10​dWi​W′=W−ηdW

όπου dW είναι ένας πίνακας με το ίδιο σχήμα με το W'. Γράφουμε -ηdW ως πίνακα R, τότε οι ενημερωμένες παράμετροι είναι:

W′=W+RW' = W + RW′=W+R

Αυτή τη στιγμή, η διαδικασία εκπαίδευσης απλοποιείται στον αρχικό πίνακα συν έναν άλλο πίνακα R. Ωστόσο, η επίλυση του πίνακα R δεν είναι απλούστερη και δεν εξοικονομεί πόρους αυτήν τη στιγμή, εισάγεται η ιδέα του LoRA.

Ένας πλήρως εκπαιδευμένος πίνακας είναι συνήθως πλήρης κατάταξη ή ικανοποιεί βασικά την κατάταξη, δηλαδή, καμία στήλη στον πίνακα δεν είναι περιττή. Στην εργασία "Scaling Laws for Neural Language Model", προτείνεται η σχέση μεταξύ του συνόλου δεδομένων και του μεγέθους των παραμέτρων Εάν αυτή η σχέση ικανοποιηθεί και η εκπαίδευση είναι καλή, το μοντέλο που προκύπτει είναι βασικά πλήρης κατάταξη. Όταν τελειοποιούμε το μοντέλο, θα επιλέξουμε ένα βασικό μοντέλο, το οποίο είναι βασικά πλήρης κατάταξη. Ποια είναι η κατάσταση της ενημέρωσης της κατάταξης του πίνακα R;

Υποθέτουμε ότι ο πίνακας R είναι ένας πίνακας χαμηλής κατάταξης. Αν το σχήμα του W είναι m×n, τότε το σχήμα του Α είναι επίσης m×n συνήθως επιλέγει μια τιμή πολύ μικρότερη από το m, την τιμή του n, όπως φαίνεται στο σχήμα:

image.png

Η αποσύνθεση ενός πίνακα χαμηλής κατάταξης σε δύο πίνακες έχει αρκετά πλεονεκτήματα. Το πρώτο είναι ότι ο αριθμός των παραμέτρων μειώνεται σημαντικά. Ας υποθέσουμε ότι το σχήμα του πίνακα R είναι 100×100, τότε ο αριθμός των παραμέτρων του R είναι 10000. Όταν επιλέγουμε την κατάταξη 10, το σχήμα του πίνακα Α είναι 100×10 και το σχήμα του πίνακα Β είναι 10×100 Ο αριθμός των παραμέτρων είναι 2000, που είναι 80% μικρότερος από τον πίνακα R.

Και δεδομένου ότι το R είναι ένας πίνακας χαμηλής κατάταξης, με επαρκή εκπαίδευση, οι πίνακες Α και Β μπορούν να επιτύχουν το αποτέλεσμα του R. Ο πίνακας AB εδώ είναι αυτό που συχνά αποκαλούμε μοντέλο LoRA.

Μετά την εισαγωγή του LoRA, η πρόβλεψή μας πρέπει να εισάγει το x σε W και AB αντίστοιχα. Αυτή τη στιγμή, ο υπολογισμός πρόβλεψης είναι:

pred=Wx+ABxpred = Wx + ABxpred=Wx+ABx

Θα είναι ελαφρώς πιο αργό από το αρχικό μοντέλο κατά την πρόβλεψη, αλλά η διαφορά βασικά δεν γίνεται αισθητή στα μεγάλα μοντέλα.

4. Πραγματική μάχη

Για να κατανοήσουμε όλες τις λεπτομέρειες, δεν χρησιμοποιούμε ένα μεγάλο μοντέλο ως πραγματική μάχη της lora, αντίθετα, επιλέγουμε να χρησιμοποιήσουμε ένα μικρό δίκτυο όπως το vgg19 για να εκπαιδεύσουμε το μοντέλο lora. Εισαγάγετε τις απαιτούμενες ενότητες:

import os  
import torch  
from torch import optim, nn  
from PIL import Image  
from torch.utils import data  
from torchvision import models  
from torchvision.transforms import transforms

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

4.1 Προετοιμασία συνόλου δεδομένων

Εδώ, τα προεκπαιδευμένα βάρη του vgg19 στο imagenet χρησιμοποιούνται ως βασικό μοντέλο, επομένως πρέπει να προετοιμαστεί ένα σύνολο δεδομένων ταξινόμησης.Για ευκολία, μόνο μία κατηγορία και 5 εικόνες προετοιμάζονται εδώdata/goldfishΚάτω:

image.png

Η κατηγορία χρυσόψαρο περιλαμβάνεται στο imagenet, αλλά η εικονογραφημένη έκδοση του χρυσόψαρου επιλέγεται εδώ Μετά από δοκιμή, το προεκπαιδευμένο μοντέλο δεν μπορεί να ταξινομήσει σωστά τις παραπάνω εικόνες. Σκοπός μας είναι να εκπαιδεύσουμε το LoRA και να κάνουμε το μοντέλο να ταξινομήσει σωστά.

Δημιουργούμε ένα LoraDataset:

transform = transforms.Compose([  
    transforms.Resize(256),  
    transforms.CenterCrop(224),  
    transforms.ToTensor(),  
    transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),  
])  
  
  
class LoraDataset(data.Dataset):  
    def __init__(self, data_path="datas"):  
        categories = models.VGG19_Weights.IMAGENET1K_V1.value.meta["categories"]  
        self.files = []  
        self.labels = []  
        for dir in os.listdir(data_path):  
            dirname = os.path.join(data_path, dir)  
            for file in os.listdir(dirname):  
                self.files.append(os.path.join(dirname, file))  
                self.labels.append(categories.index(dir))  
  
    def __getitem__(self, item):  
        image = Image.open(self.files[item]).convert("RGB")  
        label = torch.zeros(1000, dtype=torch.float64)  
        label[self.labels[item]] = 1.  
        return transform(image), label  
  
    def __len__(self):  
        return len(self.files)

  • 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

4.2 Δημιουργία μοντέλου LoRA

Ενσωματώνουμε το LoRA σε ένα επίπεδο Υπάρχουν μόνο δύο πίνακες που πρέπει να εκπαιδευτούν στο LoRA.

class Lora(nn.Module):  
    def __init__(self, m, n, rank=10):  
        super().__init__()  
        self.m = m  
        self.A = nn.Parameter(torch.randn(m, rank))  
        self.B = nn.Parameter(torch.zeros(rank, n))  
  
    def forward(self, inputs):  
        inputs = inputs.view(-1, self.m)  
        return torch.mm(torch.mm(inputs, self.A), self.B)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

Όπου m είναι το μέγεθος της εισόδου, n είναι το μέγεθος της εξόδου, η κατάταξη είναι το μέγεθος της κατάταξης, μπορούμε να ορίσουμε μια μικρότερη τιμή.

Όταν αρχικοποιούμε τα βάρη, αρχικοποιούμε το A με το θόρυβο Gauss και το B με έναν πίνακα 0. Αυτό γίνεται για να διασφαλίσουμε ότι η εκπαίδευση ξεκινά από το κάτω μοντέλο. Επειδή το AB είναι ένας πίνακας 0, το LoRA δεν λειτουργεί στην αρχική κατάσταση.

4.3 Ρύθμιση υπερπαραμέτρων και εκπαίδευση

Το επόμενο βήμα είναι η εκπαίδευση. Αυτό είναι βασικά το ίδιο με τον κανονικό κώδικα εκπαίδευσης του PyTorch.

# 加载底模和lora  
vgg19 = models.vgg19(models.VGG19_Weights.IMAGENET1K_V1)  
for params in vgg19.parameters():  
    params.requires_grad = False  
vgg19.eval()  
lora = Lora(224 * 224 * 3, 1000)  
# 加载数据  
lora_loader = data.DataLoader(LoraDataset(), batch_size=batch_size, shuffle=True)  
# 加载优化器  
optimizer = optim.Adam(lora.parameters(), lr=lr)  
# 定义损失  
loss_fn = nn.CrossEntropyLoss()  
# 训练  
for epoch in range(epochs):  
    for image, label in lora_loader:  
        # 正向传播  
        pred = vgg19(image) + lora(image)  
        loss = loss_fn(pred, label)  
        # 反向传播  
        loss.backward()  
        # 更新参数  
        optimizer.step()  
        optimizer.zero_grad()  
        print(f"loss: {loss.item()}")

  • 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

Υπάρχουν δύο σημεία που πρέπει να σημειώσουμε εδώ. Το πρώτο σημείο είναι ότι ορίσαμε το βάρος του vgg19 να μην είναι εκπαιδεύσιμο.

Το δεύτερο σημείο είναι ότι κατά τη διάδοση προς τα εμπρός, χρησιμοποιούμε τον ακόλουθο κώδικα:

pred = vgg19(image) + lora(image)

  • 1
  • 2

4.4 Δοκιμές

Ας κάνουμε ένα απλό τεστ:

# 测试  
for image, _ in lora_loader:  
    pred = vgg19(image) + lora(image)  
    idx = torch.argmax(pred, dim=1).item()  
    category = models.VGG19_Weights.IMAGENET1K_V1.value.meta["categories"][idx]  
    print(category)
torch.save(lora.state_dict(), 'lora.pth')

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

Η έξοδος είναι η εξής:

goldfish
goldfish
goldfish
goldfish
goldfish

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

Η βασική πρόβλεψη είναι σωστή, αλλά αυτό το αποτέλεσμα της δοκιμής δεν σημαίνει τίποτα. Τέλος, αποθηκεύσαμε ένα μοντέλο LoRA 5M, το οποίο είναι πολύ μικρό σε σύγκριση με τις δεκάδες MB του vgg19.

5. Περίληψη

Το LoRA είναι μια αποτελεσματική μέθοδος εκπαίδευσης για μεγάλα μοντέλα και αυτό το άρθρο χρησιμοποιεί το LoRA σε ένα μικρό δίκτυο ταξινόμησης για να δώσει στους αναγνώστες μια πιο ξεκάθαρη κατανόηση της λεπτομερούς υλοποίησης του LoRA (αλλά και επειδή δεν μπορεί να εκτελέσει μεγάλα μοντέλα). Λόγω του περιορισμένου όγκου δεδομένων, ζητήματα όπως η ακρίβεια και η αποτελεσματικότητα του LoRA δεν συζητούνται λεπτομερώς.

Πώς να μάθετε μεγάλα μοντέλα AI;

Έχω εργαστεί σε εταιρείες πρώτης γραμμής στο Διαδίκτυο για περισσότερα από δέκα χρόνια και έχω συμβουλεύσει πολλούς κατώτερους συναδέλφους. Βοήθησε πολλούς ανθρώπους να μάθουν και να αναπτυχθούν.

Συνειδητοποιώ ότι υπάρχει πολλή εμπειρία και γνώση που αξίζει να μοιραστούμε με όλους και μπορούμε επίσης να χρησιμοποιήσουμε τις ικανότητες και την εμπειρία μας για να απαντήσουμε σε πολλά από τα μπερδέματά σας στην εκμάθηση τεχνητής νοημοσύνης, γι' αυτό εξακολουθώ να επιμένω να οργανώνω και να μοιράζομαι διάφορα πράγματα, παρόλο που είμαι απασχολημένος στην δουλειά. Ωστόσο, λόγω των περιορισμένων καναλιών για τη διάδοση της γνώσης, πολλοί φίλοι στη βιομηχανία του Διαδικτύου δεν μπορούν να αποκτήσουν σωστό υλικό για τη βελτίωση της εκμάθησής τους. Ως εκ τούτου, τα σημαντικά υλικά τεχνητής νοημοσύνης με μεγάλα μοντέλα περιλαμβάνουν χάρτες εισαγωγής τεχνητής νοημοσύνης μεγάλου μεγέθους, εκμάθηση μεγάλων μοντέλων τεχνητής νοημοσύνης υψηλής ποιότητας. βιβλία και εγχειρίδια, καθώς και εκπαιδευτικά βίντεο , πρακτική εκμάθηση και άλλα ηχογραφημένα βίντεο.

Εισαγάγετε την περιγραφή της εικόνας εδώ

Το πρώτο στάδιο: Ξεκινήστε με το σχεδιασμό συστημάτων μεγάλων μοντέλων και εξηγήστε τις κύριες μεθόδους μεγάλων μοντέλων.

Το δεύτερο στάδιο: μέσω του μεγάλου έργου λέξης προτροπής μοντέλου, ξεκινήστε από την προοπτική των Προτροπών για να χρησιμοποιήσετε καλύτερα τον ρόλο του μοντέλου.

Το τρίτο στάδιο: Η ανάπτυξη εφαρμογών πλατφόρμας μεγάλων μοντέλων χρησιμοποιεί την πλατφόρμα Alibaba Cloud PAI για τη δημιουργία ενός εικονικού συστήματος προσαρμογής στον τομέα του ηλεκτρονικού εμπορίου.

Το τέταρτο στάδιο: Η ανάπτυξη εφαρμογών γνωσιακής βάσης μεγάλου μοντέλου λαμβάνει το πλαίσιο LangChain ως παράδειγμα για τη δημιουργία ενός έξυπνου συστήματος ερωτήσεων και απαντήσεων για διαβούλευση με τη βιομηχανία logistics.

Το πέμπτο στάδιο: τελειοποίηση της ανάπτυξης μεγάλων μοντέλων χρησιμοποιώντας τα πεδία της μεγάλης υγείας, των νέων λιανικών πωλήσεων και των νέων μέσων για την κατασκευή μεγάλων μοντέλων κατάλληλων για τον τρέχοντα τομέα.

Το έκτο στάδιο: Με βάση το μεγάλο μοντέλο πολλαπλών μέσων SD, κατασκευάστηκε μια θήκη μικροεφαρμογής διαγράμματος Wensheng.

Το έβδομο στάδιο: Εστίαση στην εφαρμογή και ανάπτυξη μεγάλων πλατφορμών μοντέλων και δημιουργία μεγάλων εφαρμογών της βιομηχανίας μοντέλων μέσω ώριμων μεγάλων μοντέλων όπως το μεγάλο μοντέλο Xinghuo και το μεγάλο μοντέλο Wenxin.

Εισαγάγετε την περιγραφή της εικόνας εδώ

👉学会后的收获:👈
• Με βάση την πλήρη εφαρμογή μηχανικής στοίβας μεγάλων μοντέλων (front-end, back-end, διαχείριση προϊόντων, σχεδιασμός, ανάλυση δεδομένων, κ.λπ.), μπορούν να αποκτηθούν διαφορετικές ικανότητες μέσω αυτού του μαθήματος.

• Ικανότητα χρήσης μεγάλων μοντέλων για την επίλυση σχετικών πραγματικών αναγκών έργων: Στην εποχή των μεγάλων δεδομένων, όλο και περισσότερες επιχειρήσεις και ιδρύματα πρέπει να επεξεργάζονται τεράστιες ποσότητες δεδομένων Η χρήση τεχνολογίας μεγάλων μοντέλων μπορεί να επεξεργαστεί καλύτερα αυτά τα δεδομένα και να βελτιώσει την ακρίβεια της ανάλυσης δεδομένων και τη λήψη αποφάσεων. Επομένως, η απόκτηση δεξιοτήτων ανάπτυξης μεγάλων μοντέλων εφαρμογών μπορεί να επιτρέψει στους προγραμματιστές να αντιμετωπίσουν καλύτερα τις πραγματικές ανάγκες του έργου.

• Με βάση την ανάπτυξη εφαρμογών τεχνητής νοημοσύνης μεγάλων μοντέλων και εταιρικών δεδομένων, εφαρμόστε τη θεωρία μεγάλων μοντέλων, κατέχετε την υπολογιστική ισχύ GPU, το υλικό, το πλαίσιο ανάπτυξης LangChain και τις πρακτικές δεξιότητες του έργου και μάθετε τη βελτιστοποίηση κάθετης εκπαίδευσης μεγάλων μοντέλων (προετοιμασία δεδομένων, απόσταξη δεδομένων, μεγάλες ανάπτυξη μοντέλου) Μοναδική μαεστρία.

• Δυνατότητα ολοκλήρωσης δυνατοτήτων εκπαίδευσης δημοφιλών μοντέλων κατακόρυφου πεδίου και βελτίωσης των δυνατοτήτων κωδικοποίησης των προγραμματιστών: Η ανάπτυξη εφαρμογών μεγάλων μοντέλων απαιτεί έλεγχο αλγορίθμων μηχανικής μάθησης, πλαισίων βαθιάς μάθησης και άλλων τεχνολογιών Η κυριαρχία αυτών των τεχνολογιών μπορεί να βελτιώσει τις δυνατότητες κωδικοποίησης και ανάλυσης των προγραμματιστών να γίνει πιο ικανός στη σύνταξη κώδικα υψηλής ποιότητας.

Εισαγάγετε την περιγραφή της εικόνας εδώ

1. Ο οδικός χάρτης εκμάθησης μεγάλου μοντέλου AI
2. Εμπορικό σχέδιο υλοποίησης για 100 σετ μεγάλων μοντέλων AI
3.100 επεισόδια βίντεο εκμάθησης μεγάλων μοντέλων
4.200 μεγάλα μοντέλα PDF βιβλία
5. Συλλογή ερωτήσεων συνέντευξης LLM
6.Συλλογή πόρων διαχείρισης προϊόντων AI

👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

Εισαγάγετε την περιγραφή της εικόνας εδώ