Ефикасно распоредување на модел со вештачка интелигенција на Edge уреди преку хардверско-софтверско-дизајнирање | B4N1

Ефикасно распоредување на модел со вештачка интелигенција на Edge уреди преку хардверско-софтверско-дизајнирање

3 months ago · b4n1 Read time: 4 min

**Ефикасно распоредување на модел со вештачка интелигенција на Edge уреди преку хардверско-софтверски ко-дизајн **

Вовед

Распространетоста на рабните уреди создаде нови можности апликациите за вештачка интелигенција (АИ) да бидат распоредени во реално време, овозможувајќи апликации како што се паметни домови, автономни возила и индустриска автоматизација. Сепак, ограничените пресметковни ресурси и ограничувањата на моќноста на рабните уреди претставуваат значителни предизвици за распоредувањето на моделот со вештачка интелигенција. Во оваа статија, ќе го истражиме пресекот на вештачката интелигенција, софтверското инженерство и архитектурата за да ги оптимизираме перформансите на рабните уреди, користејќи ги неодамнешните достигнувања во ефикасноста на моделите со вештачка интелигенција и техниките за кодизајнирање на хардверско-софтвер.

Предизвиците на распоредувањето на моделот со вештачка интелигенција на уредите Edge

Edge уредите се карактеризираат со нивните ограничени пресметковни ресурси, вклучувајќи процесор, меморија и потрошувачка на енергија. Традиционалните модели со вештачка интелигенција, кои често се дизајнирани за распоредување базирано на облак, не се оптимизирани за уреди со рабови. Како резултат на тоа, тие можат да доведат до:

  • Намалување на перформансите: моделите со вештачка интелигенција може да не работат ефикасно на рабните уреди, што доведува до бавно време на одговор и намалена прецизност.
  • Потрошувачка на енергија: моделите со вештачка интелигенција може да трошат значителна енергија, што може да биде загриженост за рабните уреди што се напојуваат со батерии.
  • Ограничувања на меморијата: моделите со вештачка интелигенција може да бараат големи количества меморија, што може да биде предизвик за рабните уреди со ограничени ресурси за меморија.

Техники за ко-дизајнирање на хардвер-софтвер

За да се одговори на овие предизвици, техниките за кодизајнирање на хардвер-софтвер се појавија како ветувачко решение. Овие техники вклучуваат дизајнирање и на хардверските и софтверските компоненти на рабниот уред во тандем, оптимизирајќи ги за распоредување на моделот со вештачка интелигенција.

1. Модел на кастрење

Кастрењето на моделот вклучува отстранување на непотребните тежини и врски од моделот со вештачка интелигенција, намалување на неговата големина и барања за пресметување. Оваа техника може да се примени и на невронските мрежи и на стеблата на одлучување.

увозен факел
увоз факел.нн како бн

класа ModelPruning(nn.Модул):
    def __init__(self):
        супер (ModelPruning, self).__init__()
        self.fc1 = nn.Linear(784, 128)
        self.fc2 = nn.Linear(128, 10)

    деф напред (себе, x):
        x = torch.relu(self.fc1(x))
        x = себе.fc2(x)
        врати x

модел = ModelPruning()
pruned_model = torch.nn.utils.prune_l1_unstructured(модел, 'тежина', 0,1)

2. Дестилација на знаење

Дестилацијата на знаење вклучува пренос на знаење од голем, сложен модел на вештачка интелигенција на помал, поедноставен. Оваа техника може да се користи за намалување на големината и пресметковните барања на моделот со вештачка интелигенција.

увозен факел
увоз факел.нн како бн

Дестилација на знаење од класа (nn.Модул):
    def __init__(self):
        супер(Дистилација на знаење, себе).__почеток__()
        self.fc1 = nn.Linear(784, 128)
        self.fc2 = nn.Linear(128, 10)

    деф напред (себе, x):
        x = torch.relu(self.fc1(x))
        x = себе.fc2(x)
        врати x

наставник_модел = ModelPruning()
student_model = Дестилација на знаење ()

3. Квантизација

Квантизацијата вклучува намалување на прецизноста на тежините и активирањата на моделите со вештачка интелигенција, намалување на пресметковните барања на моделот со вештачка интелигенција.

увозен факел
увоз факел.нн како бн

Квантизација на класа (nn.Модул):
    def __init__(self):
        супер(квантизација, себе).__почеток__()
        self.fc1 = nn.Linear(784, 128)
        self.fc2 = nn.Linear(128, 10)

    деф напред (себе, x):
        x = torch.relu(self.fc1(x))
        x = себе.fc2(x)
        врати x

модел = ModelPruning()
quantized_model = torch.quantization.quantize_dynamic(model, {torch.nn.Linear}, dtype=torch.qint8)

** Топ 5-10 најкористени команди/парчиња**

Команда/ исечок Опис
torch.nn.utils.prune_l1_unstructured(модел, „тежина“, 0,1) Модел на кастрење со користење на регулација на L1
torch.quantization.quantize_dynamic(модел, {torch.nn.Linear}, dtype=torch.qint8) Квантизација со помош на динамичка квантизација
torch.nn.utils.kldistance(teacher_model, student_model) Дестилација на знаење со користење на KL дивергенција
torch.nn.utils.weight_norm(model.fc1) Нормализација на тежината со употреба на норма на тежина
torch.nn.utils.clip_grad_norm_(model.parameters(), 1.0) Градиент отсекување со користење на клип град норма
torch.nn.utils.clip_grad_value_(model.parameters(), 1.0) Пресек на градиент користејќи ја вредноста на степенот на клипот
torch.nn.utils.remove_weight_norm(model.fc1) Отстранување на нормализирање на тежината со помош на отстрани норма на тежината
torch.nn.utils.fuse_conv_bn_eval(model.fc1) Спојување на конволуционен слој со користење на осигурувачот conv bn eval
torch.nn.utils.fuse_bn_eval(model.fc2) Фузија за нормализирање на серијата со користење на осигурувачот bn eval
torch.nn.utils.fuse_bn_eval(model.fc1) Фузија за нормализирање на серијата со користење на осигурувачот bn eval

Визуелизација

{
  "тип": "бар",
  "податоци": {
    "етикети": ["Модел на кроење", "дестилација на знаење", "квантизација"],
    "збирки на податоци": {
      "етикета": "прецизност",
      „податоци“: [0,9, 0,85, 0,8]
    }
  },
  "опции": {
    "наслов": {
      „екран“: точно,
      "text": "Споредба на точност"
    },
    "легенда": {
      „приказ“: точно
    }
  }
}

Заклучок

Ефикасното распоредување на моделот со вештачка интелигенција на рабните уреди бара комбинација од техники за кодизајнирање на хардвер и софтвер. Кастрење на модели, дестилација на знаење и квантизација се некои од техниките што може да се користат за намалување на големината и пресметковните барања на моделите со вештачка интелигенција. Со искористување на овие техники, програмерите можат да создадат модели со вештачка интелигенција кои се оптимизирани за рабните уреди, овозможувајќи апликации во реално време како паметни домови, автономни возила и индустриска автоматизација.

Идна работа

Идната работа во оваа област вклучува:

  • Развивање нови техники за ко-дизајнирање на хардвер-софтвер: Истражувачите и програмерите можат да истражуваат нови техники за оптимизирање на моделите со вештачка интелигенција за рабните уреди.
  • Подобрување на алгоритмите за кастрење на модели и дестилација на знаење: Развојот на поефикасни алгоритми за кастрење на модели и дестилација на знаење може да доведе до подобри перформанси и прецизност.
  • Истражување на употребата на други модели со вештачка интелигенција: Други модели на вештачка интелигенција, како што се стеблата за одлучување и случајни шуми, може да се истражат за распоредување на рабните уреди.

Продолжувајќи да го унапредуваме полето на ко-дизајнирање на хардвер-софтвер, можеме да создадеме поефикасни и поефективни модели со вештачка интелигенција за рабните уреди, овозможувајќи широк опсег на апликации и случаи на употреба.


Have Questions?

Let's Talk

Contact me on LinkedIn