Краткое руководство по компиляции исходного кода Pytorch
Краткое руководство по компиляции исходного кода Pytorch

Предисловие

Недавно я познакомился с исходным кодом Pytorch и использовал свое свободное время, чтобы прочитать и прочитать его. После его прочтения у меня впервые появилось новое понимание Pytorch.

Оказывается, территория Пайторча сейчас очень велика, и Пайторч уже не тот Пайторч, каким был год назад.

После интеграции Caffe2,Pytorch начал превращаться в бегемота,То, что здесь происходит, далеко не сравнимо с предыдущим кафе.,Суммируя,У Пайторча есть чему поучиться,В этой статье кратко рассказывается о некоторых дополнительных знаниях о Pytorch.,Давайте своими руками компилируем при использовании Pytorch, вместо того, чтобы действовать вслепую.,Но приходите с целью и выбором.

Статьи по теме, написанные ранее, также можно использовать в качестве справочного материала:

Экология Пайторча:

Среди них есть собственные библиотеки Пайторча и кооперативная.,Это можно увидетьFaceBookОчень амбициозный,Но хорошо это или плохо для нас?,СуммируянадеятьсяFBВыделите больше рабочей силы для его полировкиPytorchБар。

Получить исходный код

компилировать Первое, что нужно сделать, это Получить исходный код。

отчиновникПолучить исходный код — лучший способ,отPytorchизофициальный сайт github可以下载最新из代码。

помнить,отчиновник克隆最新из代码из时候要加入recursiveЭтот параметр,Потому что сам Pytorch требует для участия множество сторонних библиотек:

Язык кода:javascript
копировать
git clone --recursive https://github.com/pytorch/pytorch

Конечно, вы также можете загрузить исходный код предыдущей стабильной версии из интерфейса выпуска. Если мы напрямую загружаем официальный пакет исходного кода или официальный пакет выпуска, нам необходимо выполнить его после загрузки.

Язык кода:javascript
копировать
git submodule update --init --recursive

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

Структура каталогов

Далее идет Pytorch Исходный. развернутый кодпак Структура каталогов (показаны только некоторые основные папки), среди которых основными являются Исходный все коды находятся в папках, показанных ниже:

Среди них несколько важных основных библиотек отмечены красными стрелками. Вот краткое введение:

основная папка

основная папка В основномc10、aten、torch、caffe2.

Зачем ставить с10 спереди?

потому чточиновник Уже указаноc10目录是最重要из源代码папка,То есть почти весь исходный код связан с кодом здесь, например, с нашим определением типа.,Pytorch最重要изTensorиз内存分配方式ждатьждать,все в этой папке,чиновник тоже это сказал,Позже код в Aten будет постепенно перемещаться в эту папку.,Другими словами, эта папка будет содержать основной код Pytorch.

иAtenВ папке находятся некоторые реализацииTensorиз底层(иc10похожий),Он также включает в себя множество кода прямого и обратного уровней (например, код прямых и обратных операций сверточного уровня), включая стороны ЦП и графического процессора.,Суммируя ВсеC++из核心操作代码。

torchПапки одинаково важны,В основном он содержит некоторые рабочие функции немного более высокого уровня.,Напримерtorch.onesждать,Есть стороны C++ и Python.,Также включает основной код Python и код-оболочку.,Если мы используем версию Pytorch для Python,Контакт с этими кодами относительно тесный.

иCaffe2Излишне говорить,caffe2 разработал множество оптимизированных кодов операций, в основном для мобильных терминалов.,Код для объединения моделей, количественной оценки модели и т. д.,Его бэкэнд включает QNNPACK и некоторые другие базовые вычислительные библиотеки для мобильных терминалов (некоторые разработчики говорят, что GLOW также рассматривается в бэкэнде caffe2).

third_party

PytorchВедь этоБольшойиз深度学习库,Поэтому требуется множество зависимых библиотек.,其中有很多我们耳熟能详из数值计算库(eigen、gemmlowp)、Библиотека преобразования моделей (onnx、onnx-tensorrt)、Библиотека параллельного обучения (gloo、nccl)、Собственная библиотека реализации нижнего уровня (QNNPACK) и ряд зависимых библиотек, таких как pybind11, которые связывают сторону Python.

Конечно, библиотек много, поэтому я не буду здесь описывать их по отдельности.,Суммируя,Когда мы были в компилировании,Компилируемый код Pytorch будет использоваться в соответствии с нашими настройками при компиляции.,Автоматически определять, существуют ли в текущей системе необходимые сторонние библиотеки. Если ее нет, используйте стороннюю библиотеку здесь (напрямую скомпилировать и использовать диаманте сторонней библиотеки),Вот почему нам нужно выполнитьgit submodule update --init --recursiveЧтобы загрузить зависимую третью библиотеку Исходный причина кода.

tools

toolsэтотпапка中из内容到底是做什么из,Взгляните кратко на введение чиновника:

Язык кода:javascript
копировать
This folder contains a number of scripts which are used as
part of the PyTorch build process.  This directory also doubles
as a Python module hierarchy (thus the `__init__.py`).

Он содержит некоторый инструмент для генерации кода скрипта (с использованием Python).、Скрипт и коды для некоторых компонентов компиляции, а также некоторые инструменты, необходимые разработчикам.、а такжеAMDПомощь по видеокартекомпилировать代码и一些特殊情况需要использоватьизинструментждать。в наскомпилироватьPytorchИсходный Код из этой папки будет использоваться в процессе кодирования.

Нужно объяснить одну вещь,То есть Pytorch использует много генерации кода.,Например操作层函数из头文件NativeFunction.hждать,Поэтому генерация кода Скрипт в инструментах по-прежнему относительно важна.

提一个可能会использовать到из Скриптbuild_pytorch_libs.sh,этот Скриптиспользуется длякомпилироватьбиблиотека libtorchиз,Libtorch — это библиотека Pytorch, использующая C++, которая не требует упаковки Python.,Удобен для использования на этапе развертывания.

оlibtorchиз具体介绍и简单использовать可以看这里:Используйте интерфейс C++ Pytorch (libtorch) для считывания предварительно обученных весов и составления прогнозов.

Я не буду подробно описывать файлы в инструментах.,大家可以看一下其中изreadme

Про другие папки говорить особо нечего, они не очень важны по сравнению с вышеперечисленными.

компилировать

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

  • Убедитесь, что ваши cuda и cudnn установлены правильно и переменные среды установлены правильно.
  • Убедитесь, что ваша среда Python чистая. Лучше всего использовать anaconda для создания среды и установки пакетов зависимостей, необходимых для pytorch. https://github.com/pytorch/pytorch#from-source
  • Убедитесь, что ваша версия, скомпилированная на C++, не слишком низкая.,Лучше всего 4.9 и выше

компилировать Параметры

Метод установки Python создан не только с использованием Cmake.,Вместо этого он создается путем объединения инструментов настройки на стороне Python с cmake.,Проект Pytorch по-прежнему относительно велик.,Таким образом, код компиляции тоже длинный.,Давайте в основном посмотрим на переменные среды в процессе компиляции:

Язык кода:javascript
копировать
# Environment variables you are probably interested in:
#
#   DEBUG
#     build with -O0 and -g (debug symbols)
#
#   REL_WITH_DEB_INFO
#     build with optimizations and -g (debug symbols)
#
#   MAX_JOBS
#     maximum number of compile jobs we should use to compile your code
#
#   NO_CUDA
#     disables CUDA build
#   
#   ....
#   ....
#   
# Environment variables for feature toggles:
#
#   NO_CUDNN
#     disables the cuDNN build
#
#   NO_FBGEMM
#     disables the FBGEMM build
#
#   NO_TEST
#     disables the test build
#
#   NO_MIOPEN
#     disables the MIOpen build

Этикомпилировать变量根据我们из需要在执行python setup.py installиспользовать,Если вы не хотите компилировать CUDA,ноNO_CUDA=1 python setup.py install.

Выполнив приведенный выше оператор, мы можем выполнить компиляцию.

ninja

Ниндзя может значительно ускорить компиляцию,Более того, информация об ошибках, предлагаемая в процессе компиляции, является более полной и подробной.,如果我们想использоватьninjaПриходитькомпилировать,那么直接在当前изpythonсредаpip install ninjaВот и все。

Установщик Pytorch автоматически будет искать ниндзя в текущей среде.,если таковые имеются,Затем сначала используйте ninja для компиляции.

Различные режимы установки

Устанавливать только библиотеку libtorch:создаватьbuildпапка,выполнить внутриpython ../tools/build_libtorch.py

Режим разработчика:python setup.py build develop(верноPythonразвитие помогает)

Самотестирование после установки

По умолчанию, когда мы устанавливаем Pytorch, вместе с ним идет caffe2 (конечно, вы можете не устанавливать caffe2, но при выполнении некоторых конкретных операций свертки будет сообщаться об ошибке~), поэтому после успешной установки мы не должны только проверьте, успешно ли установлен Pytorch, но также проверьте, успешно ли установлен caffe2.

pytorch

Проверьте, прошла ли установка Pytorch успешно:

Язык кода:javascript
копировать
>>> import torch

>>> print(torch.cuda.is_available())
>>> print(torch.backends.cudnn.is_acceptable(torch.cuda.FloatTensor(1)))
... print(torch.backends.cudnn.version())```
True  # Появится очередь, указывающая, что cuda в норме
Ture  # Появляется Туре, указывая, что cudnn в норме.
7401  # Это номер моей версии

caffe2

Во время установкиcaffe2из环境下运行pythonи импортироватьcaffe2.python,Если загрузка прошла успешно, установка прошла успешно. Если импорт не может быть успешным,Вы можете сначала проверить сообщение об ошибке,Скорее всего какие-то мелкие ошибки,Например:

Язык кода:javascript
копировать
Python 3.6.6 |Anaconda, Inc.| (default, Oct  9 2018, 12:34:16) 
[GCC 7.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from caffe2.python import core
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/prototype/anaconda3/envs/pytorch-dev/lib/python3.6/site-packages/caffe2/python/__init__.py", line 2, in <module>
    from caffe2.proto import caffe2_pb2
  File "/home/prototype/anaconda3/envs/pytorch-dev/lib/python3.6/site-packages/caffe2/proto/caffe2_pb2.py", line 6, in <module>
    from google.protobuf.internal import enum_type_wrapper
ModuleNotFoundError: No module named 'google'

上方из导入出错是потому что当期из虚拟环境没有安装protobuf,Простое выполнение командpip install protobufВот и все,При других подобных ошибках просто установите соответствующую библиотеку согласно сообщению об ошибке.

в случае успехаimportно不会出现报错信息:

Язык кода:javascript
копировать
Python 3.6.6 |Anaconda, Inc.| (default, Oct  9 2018, 12:34:16) 
[GCC 7.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from caffe2.python import core
>>> 

Как удалить

в случае Исходный код安装изPytorch,Для удаления необходимо выполнить:

Язык кода:javascript
копировать
pip uninstall torch
python setup.py clean

Часто задаваемые вопросы

ninja

Если вы столкнулись с проблемой, что build.ninja не может быть найден,можешь попробовать переустановить ниндзя,Или не использовать Просто ниндзя.

Нет соответствующей сторонней библиотеки.

Если ваш cmake сообщает о следующей ошибке:

Язык кода:javascript
копировать
CMake Error at aten/src/ATen/CMakeLists.txt:225 (add_subdirectory):
  The source directory

    /home/prototype/Downloads/pytorch/third_party/sleef

  does not contain a CMakeLists.txt file.


CMake Error at aten/src/ATen/CMakeLists.txt:226 (set_property):
  set_property could not find TARGET sleef.  Perhaps it has not yet been
  created.

иллюстрироватькомпилировать Исходный код所需要из第三方库没有下载好,В это время необходимо выполнитьgit submodule update --init --recursiveПриходить更新第三方库源,Просто скачайте нашу стороннюю библиотеку.

Научить человека ловить рыбу хуже, чем научить его ловить рыбу,Лучший адрес для запроса компиляционных проблем — это интерфейс задач GITHUB.,Просто вставьте проблему, с которой вы столкнулись, и запросите ее.,По сути, все проблемы, с которыми вы сталкиваетесь, с которыми сталкивались другие, находятся здесь.

Справочная ссылка

https://pytorch.org/blog/a-tour-of-pytorch-internals-1/

https://github.com/pytorch/pytorch/blob/master/CONTRIBUTING.md

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose