Перейти к содержимому

Cpu model что это

  • автор:

А ловко ты это придумал! Метод распараллеливания работы моделей на CPU и GPU

Если Вам приходится постоянно обучать модели, будь то Machine Learning, или задачи в области Computer Vision, искать и классифицировать какие-либо объекты, то Вы знаете, что ожидание результата и многочисленные итерации занимают безумно много времени. Хотите сократить время обучения и повысить эффективность работы?

Как правило при решении задач машинного обучения используется только одно вычислительное устройство, например, GPU. Но многие модели обучаются на видеокарте столько же времени, как и на процессоре. Я расскажу, как распараллелить процессы для реализации обучения моделей одновременно на GPU и CPU.

Создадим класс для запуска обучения на процессоре. Он будет выглядеть следующим образом:

class CPUManager: def __init__(self): self.env = os.environ['CUDA_VISIBLE_DEVICES'] = '-1' def trainer(self, train_test_data, model): res_dict = <> """ Тут ваш код """ return res_dict

В методе “__init__” указываем для ‘CUDA_VISIBLE_DEVICES’ значение ‘-1’, чтобы графический процессор не был использован, так как если несколько процессов будут пытаться использовать одно и то же устройство, то это может привести к ошибке OutOfMemoryError.

В методе “trainer” прописываем свою реализацию обучения модели или код для ее применения на тестовых данных.

Создадим класс для запуска обучения на графическом процессоре. Он будет выглядеть следующим образом:

class GPUManager: def __init__(self): self.env = os.environ['CUDA_VISIBLE_DEVICES'] = "0" def trainer(self, train_test_data, model): res_dict = <> """ Тут ваш код """ return res_dict

В методе “__init__” указываем для ‘CUDA_VISIBLE_DEVICES’ значение ‘0’, чтобы выбрать доступный графический процессор.

В методе “trainer” так же прописываем реализацию обучения модели или, как сказано выше, код для ее применения.

Перейдем к основному классу, который запускает наши модели и отвечает за их распараллеливание.

Для сбора итога выполнения нашего обучения или использования моделей использую класс Manager библиотеки Multiprocessing. Это реализация паттерна «заместитель», предназначенная для возможности использовать общий объект несколькими запущенными процессами. Используем его для сбора результатов выполнения кода применимых моделей так как это удобнее, чем отлавливать результаты каждого процесса по отдельности.

Используем “run”, как основной метод класса, для создания двух процессов. Первый будет принимать функцию “CPU”, указываем её как target и передаем саму модель и путь до общего датасета. Точно так же делаем со вторым методом, только передаем ему функцию “GPU”. Эти функции создают объекты своих классов, отвечающие за их реализации, после запускается метод “trained”, который также принимает датасет и саму модель. Сохраняем в наш прокси-объект результат выполнения функции и ожидаем окончание работы всех процессов.

class ParallelTeachModel: def __init__(self): self.manager = multiprocessing.Manager() self.return_dict = self.manager.dict() def CPU(self, data, model): """ Этот метод выполняется с использованием заданного пути до датасета упомянутой модели. Аргументы: data (str): путь до датасета model (object): CPU модель, которую хотим использовать """ obj_cpu_manager = CPUManager() output_res = obj_cpu_manager.trainer(data, model) self.return_dict['CPU_output'] = output_res def GPU(self, data, model): """ Этот метод выполняется с использованием заданного пути до датасета упомянутой модели. Аргументы: data (str): путь до датасета model (object): GPU модель, которую хотим использовать """ obj_gpu_manager = GPUManager() output_res = obj_gpu_manager.trainer(data, model) self.return_dict['GPU_output'] = output_res def run(self, dataset, cpu_model, gpu_model): """ Это основной код, который выполняет обработку. Аргументы: data (str): путь до датасета cpu_model (object): CPU модель, которую хотим использовать gpu_model (object): GPU модель, которую хотим использовать Результат: dict: результат обработки """ # запуск CPU модели process1 = multiprocessing.Process(target=self.CPU, args=(dataset, cpu_model,)) process1.start() # запуск GPU модели process2 = multiprocessing.Process(target=self.GPU, args=(dataset, gpu_model,)) process2.start() # Объединение процессов process1.join() process2.join() return self.return_dict

Запускаем! Создаем экземпляр класса “Parallel_Teach_Model”, указываем путь до датасета, прописываем модели для CPU и GPU, после вызываем функцию “run” того же класса. Функция возвращает выходные данные моделей в виде словаря, который мы можем использовать дальше.

if __name__ == '__main__': obj = ParallelTeachModel() dataset_path = "path" cpu_model = object() gpu_model = object() preds = obj.run(dataset_path, cpu_model, gpu_model) print(preds)

Разобрали способ оптимизации обучения или использования моделей, который необходим для сокращения времени обучения и повышения эффективности работы.

Узнать модель процессора

Навряд ли, Если бы хостер пробрасывал все инструкции CPU в VDS, тогда показывался бы реальный процессор. А Вашем случае, у Вас доступен ограниченный набор процессорных команд, который эмулирует работу CPU в гостевой машине. С одной стороны это удобнее для живой миграции между разными моделями CPU, но с другой стороны будет сильно влиять на производительность, т.к. вместо использования реальных процессорных инструкций, будет использоваться ограниченный набор реальных инструкций для выполнения сложных команд. Например, Не могут быть не задействованы инструкции Intel AES, которые сильно ускоряют обработку операций шифрования, которая используется, например при работе с SSL-сертификатами.

IHOR Хостинг (https://www.ihor.hosting/) Наша ветка на серчах (/ru/forum/1015084)
На сайте с 23.03.2007
8 июля 2019, 16:18

Ivan Lungov, Спасибо, я правильно понимаю, что если на vps показывается реальная модель cpu, то при прочих равных она будет работать быстрее чем vps с qemu ?

На сайте с 30.09.2009
8 июля 2019, 16:23

Denzel82, на виртуализации KVM указать можно какой угодно текст для отображения. Верить этому нельзя. По этому большинство и не указывают.

EuroHoster.org ( https://eurohoster.org/ru/ ) — территория быстрых серверов. Выделенные серверы, VPS, SSL, домены и VPN.

На сайте с 24.04.2013
8 июля 2019, 16:26

Denzel82, да, набор нативных процессорных команд будет шире, нежели при использовании QEMU CPU. Например, вот так выглядит набор команд для CPU Intel Xeon E5620

flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid dca sse4_1 sse4_2 popcnt aes lahf_lm ida arat epb dtherm tpr_shadow vnmi flexpriority ept vpid

А вот так, для Intel Xeon Gold 6138:

flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb cat_l3 cdp_l3 intel_pt tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm mpx rdt_a avx512f avx512dq rdseed adx smap clflushopt clwb avx512cd avx512bw avx512vl xsaveopt xsavec xgetbv1 cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local dtherm ida arat pln pts hwp hwp_act_window hwp_epp hwp_pkg_req

Посмотрите сколько наборов команд доступно Вам при выводе cpuinfo , поле flags

Но опять же, тут надо смотреть какие наборы команд использует Ваше приложение, если хватает стандартных, то особой разницы не заметите, если приложение заточено под использование более продвинутых инструкций, то разница будет ощутима на одной и той же модели CPU.

Центральный процессор

Центральный процессор (CPU) — это электронная схема, которая выполняет инструкции, составляющие компьютерную программу. Центральный процессор осуществляет арифметические, логические, управляющие операции и операции вывода (I/O), указанные инструкциями в программе [1] . В этом случае он контрастирует с внешними компонентами, такими как основная память и схемы ввода-вывода, а также специализированными процессорам (GPU). Конструкция процессоров менялась с течением времени, но их фундаментальное функционирование остается практически неизменным. Основные компоненты центрального процессора включают арифметико-логический блок (АЛУ) [2] , который выполняет арифметические и логические операции, регистры процессора, которые передают операнды в АЛУ и сохраняют результаты операций АЛУ, и блок управления, который управляет извлечением (из памяти), декодированием и выполнением (инструкций), направляя скоординированные операции ALU, регистров и других компонентов.

В настоящее время процессоры наиболее широко используются в виде интегральных схем в виде микропроцессоров [3] и микроконтроллеров во встроенных системах (например, в стиральных машинах, DVD-плеерах, смартфонах и т. д.).

В более раннем использовании термин «процессор» понимался как компонент (полупроводниковый чип в пластиковом корпусе, который вставляется в гнездо на плате), так и вычислительный логический блок. Однако сегодня многие микропроцессоры имеют несколько так называемых процессорных ядер, причем каждое ядро само по себе представляет собой (в значительной степени) отдельный логический блок. Сегодня под термином процессор обычно понимается компонент; если имеется в виду логический блок обработки данных, то обычно говорят о процессорном ядре.

  • 1 Основная информация
  • 2 История создания первых кристаллических процессоров
    • 2.1 Intel 4004
    • 2.2 Intel 8080
    • 2.3 Intel 8086
    • 2.4 Motorola 68000
    • 2.5 Intel i386

    Основная информация

    AMD Ryzen 9 5900X — вид процессора сверху

    Многие процессоры используют для управления бытовыми приборами, промышленными устройствами и т. д. В мэйнфреймах (англ. mainframes) раньше использовались собственные процессорные архитектуры производителей, такие как IBM (PowerPC), процессор Cell или SUN (процессор SPARC); сегодня используются адаптированные версии распространенных моделей процессоров для компьютера.

    Процессоры для встраиваемых систем занимают около 90 процентов рынка процессоров, причем 80 процентов из них представляют собой так называемые микроконтроллеры, которые помимо собственно процессора содержат другие функции (например, специальные аппаратные интерфейсы или непосредственно интегрированные датчики). Только около 10 процентов используются на персональных компьютеров, рабочих станциях или серверами [4] .

    История создания первых кристаллических процессоров

    Intel 4004

    Intel 4004

    Первыми однокристальными микропроцессорами считаются процессоры 4-битного Intel 4004, вышедшие 15 ноября 1971 года. Intel только начинает свой путь развития, их создатели Роберт Нойс, Эндрю Гроув, Гордон Мур потратили много сил на процесс развития. С помощью итальянского физика Федерико Фаджина инженерам компании удалось разместить ключевые компоненты на одном чипе и создать микропроцессор 4004.

    Intel 4004 производился по 10-мкм техпроцессу, насчитывал 2250 транзисторов и работал на частоте 108 кГц (проводил 92 600 операций в секунду). [5]

    Intel 8080

    В 1974 году Intel выпустила усовершенствованную версию 8-битного микропроцессора Intel 8080. Его производство было выполнено по новому 6-мкм техпроцессу с использованием технологии NMOS, позволяющей разместить 4758 транзисторов на кристалле. Тактовая частота составляла 2,5 МГц объем памяти — 64 Кб. На основе процессора Intel 8080 компания MITS создала микрокомпьютер Altai-8800. [6]

    Intel 8086

    В начале 1978 г. компания Intel выпустила первый 16-битный микропроцессор 8086. Его разработка велась более двух лет. Процессор производился по 3-мкм техпроцессу, содержал 29 000 транзисторов. Объем памяти достиг 1 Мб. На частоте 4 МГц — 10 МГц, разрядность регистров и шины данных была 16 бит, а разрядность адреса — 20 бит.

    Motorola 68000

    Motorola MC68000P8 CPU, 64-pin DIP.

    Серия CISC-микропроцесоров Motorola 68000 была представлена в 1979 году. Кристалл имел 32-битное ядро, но работал посредством 16-битных шин данных и 24-разрядной шиной адресов. Его частота составляла 8 МГц — 20 МГц, а количество транзисторов насчитывало 68 000 штук. CPU производился в форм-факторе DIP с 64 контактами. Однако существуют и модели с разъемами LCC, PGA. Он стал популярен среди многих компаний и использовался в различных ПК. Наиболее известными являются компьютеры Apple.

    Intel i386

    В 1985 году вышел 32-битный процессор с архитектурой x86 третьего поколения Intel 80386 (или i386). Производился по 1,5-мкм — 1,0-мкм техпроцессу. Тактовая частота составляла 12 МГц — 40 МГц.

    Производительность

    Производительность или быстродействие процессора зависит, среди многих других факторов, от тактовой частоты (обычно задается в кратных герцах) и количества инструкций за такт (IPC), которые в совокупности являются коэффициентами для количества инструкций в секунду (IPS), которые может выполнять процессор. Многие сообщенные значения IPS представляли «пиковые» скорости выполнения искусственных последовательностей команд с небольшим количеством ответвлений, в то время как реалистичные рабочие нагрузки состоят из сочетания инструкций и приложений, выполнение некоторых из которых занимает больше времени, чем других. Производительность иерархии памяти также сильно влияет на производительность процессора, что практически не учитывается при вычислениях MIPS. Из—за этих проблем были разработаны различные стандартизированные тесты, часто называемые «бенчмарками» для этой цели, такие как SPECint, чтобы попытаться измерить реальную эффективную производительность в часто используемых приложениях. [7]

    Вычислительная производительность компьютеров повышается за счет использования многоядерных процессоров, что, по сути, заключается в объединении двух или более отдельных процессоров (в этом смысле называемых ядрами) в одну интегральную схему. В идеале двухъядерный процессор должен быть почти в два раза мощнее одноядерного. На практике прирост производительности намного меньше, всего около 50 %, из-за несовершенных программных алгоритмов и реализации. Увеличение количества ядер в процессоре (например, двухъядерный, четырехъядерный и т. д.) Увеличивает рабочую нагрузку, с которой можно справиться. Это означает, что процессор теперь может обрабатывать многочисленные асинхронные события, прерывания и т. д. что может негативно сказаться на работе процессора при перегрузке. Эти ядра можно рассматривать как разные этажи перерабатывающего предприятия, где каждый этаж выполняет свою задачу. Иногда эти ядра будут выполнять те же задачи, что и соседние с ними ядра, если одного ядра недостаточно для обработки информации.

    Из-за специфических возможностей современных процессоров, таких как одновременная многопоточность и uncore (это термин, используемый Intel для описания функций микропроцессора, которых нет в ядре, но которые должны быть тесно связаны с ядром для достижения высокой производительности), которые предполагают совместное использование фактических ресурсов процессора с целью увеличения загрузки, мониторинг уровней производительности и использования оборудования постепенно стал более сложной задачей. В качестве ответа некоторые процессоры реализуют дополнительную аппаратную логику, которая отслеживает фактическое использование различных части центрального процессора и предоставляет различные счетчики, доступные программному обеспечению; примером может служить технология Intel Performance Counter Monitor.

    Мобильные процессоры

    В последние годы спрос на ноутбуки с процессорами ARM растет: если в 2020 году они занимали лишь 2,2 % рынка, то в конце 2022 года этот показатель составил уже 14,9 % [8] . Главная разница между процессорами ARM и Х86 заключается в меньшем энергопотреблении, поэтому ноутбуки на его основе могут работать значительно дольше от одного заряда аккумуляторов; второе преимущество — они существенно меньше греются во время работы. Это дает возможность не беспокоиться за перегрев ноутбука. В Windows 10 поддержка ARM-решений была реализована на базовом уровне, в более новой Windows 11 ситуация значительно улучшилась. [9]

    Примечания

    1. ↑Энциклопедия процессорных терминов(неопр.) . IXBT.com.
    2. ↑Процессор. Основные компоненты и их назначение(неопр.) . Perscom.ru.
    3. ↑Развитие встраиваемых систем(неопр.) . Радиосхемы.
    4. ↑Поддержка многоядерных процессоров во встраиваемых системах(неопр.) . Открытые системы.
    5. ↑Эволюция процессоров. Часть 1: 8-битная эпоха(неопр.) . Ferra.ru (13.06.2014 г.).
    6. ↑Что такое процессор? Основные характеристики процессоров(неопр.) . pc.ru.
    7. ↑Производительность процессора и в чем она измеряется(неопр.) . infotechnica.ru.
    8. ↑Ноутбуки на Arm лучше перенесут спад на рынке ПК, а через несколько лет станут популярнее моделей на AMD(неопр.) . 3dnews.ru.
    9. ↑Господству AMD и Intel приходит конец из-за устаревшей архитектуры процессоров.(неопр.) . Cnews.ru.

    Данная статья имеет статус «готовой». Это не говорит о качестве статьи, однако в ней уже в достаточной степени раскрыта основная тема. Если вы хотите улучшить статью — правьте смело!

    Как определить модель процессора AMD?

    , но model name выглядит как не более чем линейка процессора, а не наименование модели. Число 49 поля model в связке с model name никакой внятной информации после гуглинга не отдает.

    Где у AMD находится документация по такого рода процессорам?

    biophydener
    14.01.24 15:08:36 MSK

    • Ответить на это сообщение
    • Ссылка

    anonymous
    ( 14.01.24 15:28:27 MSK )

    • Ответить на это сообщение
    • Ссылка

    Что имеется в виду под словами «на сервере» ?

    symon2014 ★★
    ( 14.01.24 15:47:10 MSK )

    • Ответить на это сообщение
    • Ссылка

    Остаётся лишь удивляться, как тебе удалось найти этот сайт.

    anonymous
    ( 14.01.24 15:58:35 MSK )

    • Ответить на это сообщение
    • Показать ответ
    • Ссылка

    Ответ на: комментарий от anonymous 14.01.24 15:58:35 MSK

    Если это в мой огород , то у меня есть VPS(типа тоже сервер) , а на нём Debian ( тоже вроде не гуй а сервер ). Так вот он показывает ваще QEMU CPU. А на самом деле хрен его знает , что там у них стоит. Вот поэтому и уточняю насчёт сервера.

    symon2014 ★★
    ( 14.01.24 16:18:54 MSK )

    • Ответить на это сообщение
    • Показать ответ
    • Ссылка

    Ответ на: комментарий от symon2014 14.01.24 16:18:54 MSK

    Это специально ограничивают детект процессора и еготинструкции чтобы облегчить миграцию. Иначе какой-нибудь софт настроится под amd, потом виртуалку мигрируют на xeon и всё сломается

    mittorn ★★★★★
    ( 14.01.24 17:29:40 MSK )

    • Ответить на это сообщение
    • Ссылка

    ~/Downloads ❯ sudo dmidecode -s processor-manufacturer Advanced Micro Devices, Inc. ~/Downloads ❯ sudo dmidecode -s processor-family Zen ~/Downloads ❯ sudo dmidecode -s processor-frequency 3900 MHz ~/Downloads ❯ sudo dmidecode -s processor-version AMD Ryzen 5 5600G with Radeon Graphics 

    Но это информация, которую BIOS отдает. Это выглядит как парсинг какого-то файла (не знаю где он лежит). Напрямую попросить процессор представиться вроде нельзя

    rtxtxtrx
    ( 14.01.24 17:33:06 MSK )
    Последнее исправление: rtxtxtrx 14.01.24 17:37:09 MSK (всего исправлений: 1)

    • Ответить на это сообщение
    • Ссылка

    Ядро старое может? Информацию в /proc/cpuinfo сочиняет оно, и если проц слишком новый и ядро его не знает — информация будет скудная.

    firkax ★★★★★
    ( 14.01.24 17:36:02 MSK )
    Последнее исправление: firkax 14.01.24 17:36:29 MSK (всего исправлений: 1)

    • Ответить на это сообщение
    • Ссылка

    А вообще, модель определяется тремя числами: family, model, stepping. По таблицам, которые наверно спрятаны где-то в мануалах производителя. Ну или в инете поищи, прям так и введи запрос: «amd family число model число stepping число». Возможно по количеству ядер и размеру кеша можно ещё что-то уточнить.

    firkax ★★★★★
    ( 14.01.24 18:08:07 MSK )

    • Ответить на это сообщение
    • Ссылка

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *