Более быстрое закреплено тензор процессора <--> GPU Pytorch Variabe Перенос и тензор графического процессора <--> перенос переменной переменной GPU Pytorch, в некоторых случаях.
Поскольку для некоторых систем, использование закрепленных тензоров процессора Pytorch быстрее, чем использование Cupy Tensors (см. В разделе «Как он работает» для более подробной информации), я создал общие классы тензоров Pytorch PytorchModelFactory и PytorchOptimizerFactory , которые могут определить любое настройку Tensors для cuda или cpu , и если используйте cpu , если он может быть закреплен. Оригинальные классы GPUPytorchModelFactory и GPUPytorchOptimizerFactory все еще находятся в библиотеке, поэтому существующий код с использованием Speedtorch не должен быть затронут. Документация была обновлена, чтобы включить эти новые классы.
Эта библиотека переворачивается вокруг Cupy Tensors, прикрепленных к процессору, что может достичь в 3,1x более быстрой передачи ЦП -> GPU, чем регулярные тензоры, закрепленные Pytorch, и в 410 раз быстрее GPU -> передача процессора. Скорость зависит от количества данных и количества ядер ЦП в вашей системе (см. Раздел «Как это работает» для получения более подробной информации)
Библиотека включает в себя функции для обучения встраиванию; Он может размещать встраиваемые на ЦП ОЗУ, пока они простаивают, щадя ОЗУ графического процессора.
Первоначально я создал эту библиотеку, чтобы помочь обучить большое количество встраиваний, которые у графического процессора могут испытывать проблемы с удержанием в оперативной памяти. Чтобы сделать это, я обнаружил, что, проведя некоторые встроенные на ЦП, может помочь достичь этого. Системы встраивания используют Sprase Training; Только фракция общего праметрам участвует в шагах вперед/update, остальные простоя. Поэтому я подумал, почему бы не оставить параметры простоя от GPU во время этапа обучения? Для этого мне нужен был быстрый процессор -> передача графического процессора.
Для полной предыстории, пожалуйста, смотрите страницу Devpost
https://devpost.com/software/speedtorch-6w5unb
При быстром процессоре GPU можно разработать множество забавных методов для функциональных возможностей, которые ранее считали, что люди могли быть невозможны.
? ️ Включите Speedtorch в ваши конвейеры данных для быстрой передачи данных в/из процессора <->
? Пока у вас достаточно ОЗУ процессора, вы можете размещать любое количество встраиваний, не беспокоясь о оперативной памяти GPU.
️ Используйте Adadelta, Adamax, RMSPROP, RPROP, ASGD, ADAMW и Adam Optimizers для обучения Sparse Entgeddings. Ранее только Spraseadam, Adagrad и SGD подходили, поскольку только эти непосредственно поддерживали редкие градиенты.
(Редактировать 9-20-19, один из разработчиков Pytorch указал на некоторые незначительные ошибки в исходном коде маркировки, значения и код были обновлены)
Вот ноутбук, сравнивая передачу через тензоры Speedtorch против Pytorch, с закрепленными тензорами CPU и CUDA. Все тесты были проведены с помощью экземпляра Colab с графическим процессором Tesla K80 и 2 -сердечным процессором.
ОБНОВЛЕНИЕ 10-17-19: Google Colab теперь является стандартным с 4-яйными процессорами, поэтому этот ноутбук даст отличные результаты, чем сообщается ниже, поскольку индексированные керналы Pytorch станут более эффективными, поскольку количество ядер ЦП увеличивается.
https://colab.research.google.com/drive/1pxhbmbzqtiq_nlfguianpf_mfpiqskks
В этом ноутбуке раздача данных 131 072 встроенных встроенных 32 измерений 128, в и обратно и обратно и обратно и обратно и обратно, с n = 100. ЦП Google Colab имеет 4 ядра, что влияет на скорость передачи. ЦП с большим количеством ядер будет меньше преимуществ использования Speedtorch.
Таблица ниже представляет собой сводку результатов. Передача данных из тензоров Pytorch Cuda в переменную встраивания CUDA Pytorch быстрее, чем эквивалент Speedtorch, но для всех других типов передачи Speedtorch более быстрее. И для суммы обоих этапов, переносимых в/из встраивания CUDA Pytorch, Speedtorch более быстрее, чем эквивалент Pytorch как для обычных тензоров GPU, так и для закрепленных процессоров.
Я заметил, что разные случаи Colab приводят к различным результатам скорости, поэтому помните об этом, рассматривая эти результаты. Личный запуск ноутбука Colab может привести к различным значениям, хотя порядок магнита результатов, как правило, одинаковы.
Время передачи в следующих таблицах дается за считанные секунды. Этот анализ был предварительно сформирован с экземпляром Colab, процессор которого имеет 2 ядра. У Colab есть профессиональная версия платных экземпляров, которые представляют собой 4 основных процессора, поэтому следующий сравнительный анализ не будет отражать для этих экземпляров.
| Тензор | К переменной cuda pytorch | Сравнение |
|---|---|---|
| Speedtorch (Cuda) | 0,0087 | На 6,2 раза медленнее, чем эквивалент pytorch |
| Speedtorch (pinnedcpu) | 0,0154 | В 3,1 раза быстрее, чем эквивалент pytorch |
| Pytorch (cuda) | 0,0014 | В 6,2 раза быстрее, чем Speedtorch, эквивалентный |
| Pytorch (pinnedcpu) | 0,0478 | 3,1 раза медленнее, чем Speedtorch, эквивалентный |
| Тензор | От переменной cuda pytorch | Сравнение |
|---|---|---|
| Speedtorch (Cuda) | 0,0035 | В 9,7 раза быстрее, чем эквивалент pytorch |
| Speedtorch (pinnedcpu) | 0,0065 | В 410 раз быстрее, чем эквивалент pytorch |
| Pytorch (cuda) | 0,0341 | 9,7x медленнее, чем Speedtorch, эквивалентный |
| Pytorch (pinnedcpu) | 2.6641 | 410x медленнее, чем Speedtorch, эквивалентный |
| Тензор | Сумма с переменной cuda pytorch | Сравнение |
|---|---|---|
| Speedtorch (Cuda) | 0,0122 | В 2,9 раза быстрее, чем эквивалент pytorch |
| Speedtorch (pinnedcpu) | 0,0219 | В 124 раза быстрее, чем эквивалент pytorch |
| Pytorch (cuda) | 0,0355 | 2,9 раза медленнее, чем Speedtorch, эквивалентный |
| Pytorch (pinnedcpu) | 2.7119 | 124x медленнее, чем Speedtorch, эквивалентный |
Аналогичные тесты были рассчитаны для переноса в/из оптимизаторов Pytorch CUDA. Результаты в основном такие же, вот ноутбук, используемый для сравнительного анализа оптимизаторов
https://colab.research.google.com/drive/1y2nehd8xj-ixfjkj2qwua_ujqjbbhhj5
Хотя тензоры Speedtorch, как правило, быстрее, чем у Pytorch, недостаток в том, что тензоры Speedtorch используют больше памяти. Однако, поскольку передача данных может происходить быстрее, вы можете использовать Speedtorch для увеличения количества внедрений, обученных в вашей архитектуре, удерживая параметры как в графическом процессоре, так и в процессоре.
Эта таблица представляет собой краткое изложение сравнительного анализа в Google Colab. По моему опыту, кажется, существует некоторое различие в сообщенных значениях памяти в Colab, +-0,30 ГБ, поэтому имейте в виду это при рассмотрении этих чисел. Значения предназначены для хранения тензора Float32 Float32 10 000 000 x128.
| Тензор | ЦП (ГБ) | Графический процессор (ГБ) |
|---|---|---|
| Cupy Pinnedcpu | 9.93 | 0,06 |
| Pytorch Pinnedcpu | 6.59 | 0,32 |
| Cupy Cuda | 0,39 | 9.61 |
| Pytorch Cuda | 1.82 | 5.09 |
Несмотря на то, что время Pytorch to/of For For Pytorch Tensor <-> Pytorch Cuda переменная не так быстро, как эквивалент Cupy, скорость все еще работоспособна. Таким образом, если память все еще является проблемой, лучшим из обоих мировых подходов было бы то, что Cupy CPU Cupy Cpu Cupy Cup
Это ноутбук, который я использовал для измерения, сколько памяти занимает каждый тип переменной. https://colab.research.google.com/drive/1zky7pyupaidrnx2hdtbujwo8juy0xkue Если вы используете это в Colab, вам нужно будет перезапустить окружающую среду после каждого создания тензора, чтобы получить меру для следующего тензора.
Для передачи процессора <-> это зависит от объема передаваемых данных и количества у вас ядер. Как правило, для 1-2 ядра процессора Speedtorch будет намного быстрее. Но по мере того, как количество ядер процессора увеличивается, процессора Pytorch <-> операции по индексации графического процессора становятся более эффективными. Для получения более подробной информации об этом см. В следующем разделе «Как это работает». Чтобы получить простой способ узнать, получите ли вы преимущество в скорости в своей системе, пожалуйста, запустите код сравнительного анализа в своей системе, но измените объем данных, чтобы отразить сумму, с которой вы будете работать в своем приложении.
Для переноса GPU <--> при использовании обычных индексационных обозначений в ванильном пироге все системы получат увеличение скорости, поскольку Speedtorch обходит ошибку в операциях индексации Pytorch. Но этой ошибки можно избежать при использовании ночной версии или просто использования различных представлений об индексации, пожалуйста, см. В разделе «Как это работает» для получения более подробной информации.
Обновление 9-20-19: я изначально не знал, почему это быстрее, чем использование тензоров Pytorch; Я случайно наткнулся на преимущество скорости. Но один из разработчиков Pytorch на форуме Pytorch указал на это.
Что касается лучшей передачи процессора <->, то это потому, что Speedtorch избегает операции индексации процессора, маскируя тензоры процессора в виде тензоров графического процессора. Операция индекса процессора может быть медленной, если работать с очень небольшим количеством ядер ЦП, таких как 2 в Google Colab, но может быть быстрее, если у вас много ядер. Это зависит от того, сколько данных вы передаете и сколько у вас ядер.
Что касается лучшей передачи графического процессора <->, это потому, что Speedtorch избегает ошибки в операции индексации. Эту ошибку также можно избежать, используя ночные сборки или используя index_select / index_copy_ вместо нотации a[idx] в 1.1 / 1.2.
Для получения более подробной информации об этом, см. Этот пост Pytorch
https://discuss.pytorch.org/t/introducing-speedtorch-4x-speed-cpu-gpu-transfer-110x-gpu-cpu-transfer/56147/2
где инженер Pytorch дает подробный анализ о том, как в определенных случаях ядра индексирования Cupy приводит к скорости. Это не сама передача, которая становится быстрее, а индексационные ядры, которые используются.
Что касается того, как работает управление памятью в Cupy, я направляю к этим двум вопросам StackOverflow, которые я задал, где блестящий пользователь Роберт Кровелла не только дал подробные объяснения, но и выяснил, как выделить закрепленную память на массивы Cupy, разработав свой собственный распределитель памяти для Cupy. Это в основном основная технология, стоящая за Speedtorch.
https://stackoverflow.com/questions/57750125/cupy-outofmemororror-when-trying-to-cupy-load-larger-dimension-npy-files-in-me
https://stackoverflow.com/questions/57752516/how-to-use-cuda-pinned-zero-copy-memory-for-a-memory-mared-file
Speedtorch - PIP -установка. Вам нужно установить и импортировать Cupy, прежде чем импортировать Speedtorch.
!pip install SpeedTorch
import cupy
import SpeedTorch
Эта ноутбук Colab показывает, как загружать данные в Speedtorch, используя его гаджет данных, и как передавать эти данные в/из переменной Pytorch CUDA.
https://colab.research.google.com/drive/185z5gi62azxh-eemfrttjqxeifhobxxf
Пожалуйста, посмотрите ноутбук Speed Bending, чтобы увидеть преимущество скорости использования Speedtorch.
Для людей сначала пытаются выяснить, как использовать Speedtorch, я рекомендую следовать этому примеру, поскольку Word2VEC является одним из наиболее известных алгоритмов в машинном обучении.
https://colab.research.google.com/drive/1apjr3onbgqwm3fbcbkmvwagxidxldxot
В ноутбуке показано, как обучать Word2VEC регулярно, а затем показывает, как использовать Speedtorch для обучения на одних и тех же данных, используя один из оптимизаторов, обычно не поддерживаемых для разреженного обучения. Это возможно, потому что, поскольку все встраивания, содержащиеся в переменной встраивания, имеют обновление во время каждого шага, вы можете установить sparse=False во время инициализации.
TL; DR:
Нормальная тренировка : переменные встраивания питла содержат все встраивания. Оптимизатор Pytorch содержит все соответствующие веса параметров для каждого встраивания.
Traing Speedtorch : переменные Embeddng Pytorch содержат только партию встроений. Pytorch Optimizer содержит только все соответствующие веса параметров для этой партии. Тензоры Sparsetorch содержат остальное и обмениваются встроениями/весами с переменной pytorch на каждом этапе.
В разреженных алгоритмах обучения, таких как Word2VEC, перчатки или нейронная совместная фильтрация, на каждом этапе обучается лишь часть общих параметров (EmbedDNG). Если ваш графический процессор не сможет обрабатывать все ваши вставки при желаемом размере встраивания, опция будет состоять в том, чтобы размещать некоторые из ваших параметров на закрепленных CPY -массивах CPU и передачи этих параметров в тензоры вашей модели по мере необходимости. Выполнение этого первичного в Pytorch было бы очень медленным, особенно потому, что передача параметров между установленной CUDA-установленной с переменной Pytorch и закрепленным тензором CPU Pytorch может занять 2,5-3 секунды (в Google Colab). К счастью, этот шаг занимает только 0,02-0,03 секунды с Speedtorch!
Case использует:
-2,829 853 Книга Enterdings--
Speedtorch использовался при обучении 2829 853 книг для редкой рекомендации книги.
https://github.com/santosh-gupta/lit2vec2
https://devpost.com/software/lit2vec2
Каждая книга имела внедрение размера 400, но был использован размер встраивания 496, размер 400 был обусловлен ограничением места на моем Google Drive для хранения обученных встроений :(. Но пределы графического оперативного оперативного оперативного операции больше не являются проблемой :) Вот прямая связь с демо -тренировочным ноутбуком, который Trains with 496 -й поборник, используемый Speedtor.
Примечание. Вам нужна версия ноутбука Colab с 25 ГБ оперативной памяти, а не обычным 12 ГБ. Чтобы получить этот тип экземпляра, вам необходимо сбить свой текущий экземпляр из -за подавляющего ОЗУ, а затем записки в левом нижнем углу с вопросом, хотите ли вы обновить. Вы можете сделать это, сделав петлю, которая продолжает удвоить размер матрицы Numpy Float.
https://colab.research.google.com/drive/1aqht-hetihxmet1wjqrorc3q9tfjqj19
Вот непосредственная ссылка с той же моделью и данными, но не использует Speedtorch
https://colab.research.google.com/drive/1idv1jbouzvpcfdsy40wirrphedoanti_
Используя ортодоксальный метод обучения, самый большой размер встраивания, который Colab может обрабатывать, составляет 255-260, все выше, чем эта, и возникнет ошибка CUDA
RuntimeError: CUDA out of memory. Tried to allocate 2.74 GiB (GPU 0; 11.17 GiB total capacity; 8.22 GiB already allocated; 2.62 GiB free; 5.05 MiB cached)
-4,886 544 исследовательские документы внедрения
https://github.com/santosh-gupta/research2vec2
Speedtorch может позволить мне обучать 14 886 544 исследовательских документов в постройке в размере 188, позволяя мне хранить мои целевые встраивания на процессоре, сохраняя при этом мои контекст встроенных в GPU (был использован оптимизатор SGD, поэтому нет оптимизационных весов).
Вот прямая ссылка на ноутбук.
https://colab.research.google.com/drive/1sakzsahoy6o_u1df_z15_qkr5ylni_gr
Примечание. Вам нужна версия ноутбука Colab с 25 ГБ оперативной памяти, а не обычным 12 ГБ. Чтобы получить этот тип экземпляра, вам необходимо сбить свой текущий экземпляр из -за подавляющего ОЗУ, а затем записки в левом нижнем углу с вопросом, хотите ли вы обновить. Вы можете сделать это, сделав петлю, которая продолжает удвоить размер матрицы Numpy Float.
Без Speedtorch только размер встраивания 94-96 может быть использован в Google Colab Tesla K80-графическом процессе перед RuntimeError: CUDA out of memory . Вот версия обучения без использования Speedtorch.
https://colab.research.google.com/drive/1jh7rugeajhdwdgnfwg3twm1zjytqu0kr
Всякий раз, когда используя тензоры Cupy GPU, инициализируйте их перед любыми закрепленными тензорами процессора. Это связано с тем, что инициализация тензоров Cupy GPU, по -видимому, использует твердое количество ОЗУ процессора. Поэтому, если вы ограничены в ОЗУ процессора, и у вас уже есть закрепленные тензоры процессора в памяти, то инициализация тензоров Cupy GPU может вызвать сбое.
Если вы можете установить все свои параметры в памяти графического процессора, используйте Pure Pytorch, так как это самый быстрый вариант для обучения. Но если вы не можете установить все свои параметры в памяти, разделите свои параметры (имейте в виду, что ваши оптимизаторы также имеют веса) между Cupy Cuda Tensors от Speedtor Это 2 -й самый быстрый вариант. Но, если вы все еще не можете вписать все свои параметры в память таким образом, то разделите свои параметры между тензорами Cud, прикрепленными Speedtorch Cupy, и тензорами Pytorch Cuda's Speedtorch; Это медленнее, чем оба параметра, но использует меньше памяти графического процессора. Для 3-й вариант, вот два ноутбука, в которых показан пример этого https://colab.research.google.com/drive/1aqht-hetihxmet1wjqrorc3q9tfjqj19, https://colab.research.google.com/drive/1sakzsahoy6o_u1df_z15_qkr5ylni_gr
После тренировки сохранение любых переменных CUDA приведет к увеличению использования памяти и может вызвать крушение, особенно с помощью Cupy. Если вы находитесь в пределах своей оперативной памяти. В этом случае используйте метод getNumpyVersion , чтобы получить версию вашего тензора Numpy, а затем использовать Numpy.save или HDPY/Pytables, чтобы сохранить массив Numpy. Numpy Save более легкая.
Либо откройте проблему, либо поболтайте со мной каталог на gitter здесь https://gitter.im/speedtorch
Я ищу больше функциональных возможностей вокруг быстрого процессора -> передачи графического процессора. Если у вас есть идея, пожалуйста, опубликуйте проблему GitHub.
Кроме того, Speedtorch также имеет тензоры CPU Cupy GPU/закрепленного процессора и графического процессора Pytorch, также имеет тензоры Pytorch, закрепленные на процессоре, и Cupy Memmap GPU/закрепленный тензоры процессора. Я не нашел твердого использования для такого рода тензоров, но они полностью закодированы и доступны для использования.
https://github.com/santosh-gupta/speedtorch/tree/master/speedtorch
Одна область, на которую я хотел бы посмотреть, - есть ли способ снизить память оперативной памяти, используя Cupy Memmaps. До сих пор они используют столько же памяти, сколько живые версии.
ModelFactory ( model_variable , total_classes , embed_dimension , datatype = 'float32' , CPUPinn = False )Создает коммутаторы для переменных моделей с использованием Cupy. Переключает переменные из вашей коллекции полного встраивания и вашей коллекции моделей. Каждая переменная нуждается в своем собственном переключателе.
Пример:
uEmbed_switcher = SpeedTorch . ModelFactory ( skip_gram_modelSparse . u_embeddings , total_classes = 50000 , embed_dimension = 128 )Аргументы:
model_variable : конкретная переменная из вашей модели, для которой вы хотели бы создать коммутатор.
total_classes : общее количество встроенных встроений, которые будут обучены.
embed_dimension : измерение встроенных.
datatype (необязательно): dataType для переменной. По умолчанию «float32».
CPUPinn (необязательно): прикрепите свою коллекцию полной встраивания в процессоре. Запасы памяти графического процессора, но передача данных будет медленнее. По умолчанию ложь.
Методы:
zerosInit() : инициализирует полную коллекцию переменной коммутатора с помощью нулей:
uniformDistributionInit(low, high) : инициализирует полную коллекцию переменной коммутатора с равномерным распределением от low до high
normalDistributionInit(mean, stdDev) : инициализирует полную коллекцию переменного коммутатора с нормальным распределением со средним mean и стандартным отклонением stdDev
variableTransformer( batchSize, posPerBatch, negPerBatch = None ) : устанавливает фиктивный вход, который будет использоваться для прямого этапа вашей модели. batchSize - это размер вашей партии, а posPerBatch - это количество положительных примеров на партию. Если для отрицательных примеров необходим второй манекен -ввод, negPerBatch (необязательно) может быть установлен на количество отрицательных примеров, а вместо одного будет возвращаться два фиктивных входа.
beforeForwardPass(retrievedPosIndexes , retrievedNegIndexes = None) : переключатели встраивания из коллекции Full Enterdings в ваши модели Enterdings. retrievedPosIndexes - это показатели положительных образцов, которые необходимо извлечь. Если также необходимо извлечь отрицательные выборки, также может быть проведено значение для retrievedNegIndexes .
afterOptimizerStep( retrievedPosIndexes , retrievedNegIndexes = None) : переключатели обновлены встроены из вашей модели в коллекцию Full Engeddings. retrievedPosIndexes - это показатели полученных положительных образцов. Если также были извлечены отрицательные выборки, также может быть проведено значение для retrievedNegIndexes .
saveCupy(saveFileName) : Сохраните тензор в .npy file.
loadCupy(loadFileName) : загрузить тензор из .npy file.
getNumpyVersion : Получите версию Tensor Numpy.
OptimizerFactory( given_optimizer, total_classes, embed_dimension, model, variable_name, dtype='float32' , CPUPinn = False)
Создает коммутаторы для переменных оптимизатора с помощью Cupy. Переключает переменные из вашей коллекции полного встраивания и вашей коллекции оптимизатора. Каждая переменная нуждается в своем собственном переключателе.
Пример:
uAdagrad_switcher = SpeedTorch . OptimizerFactory ( given_optimizer , total_classes , embed_dimension , model , variable_name , dtype = 'float32' , CPUPinn = False )Аргументы:
given_optimizer : оптимизатор инициализируется с весами модели. При использовании для обучения Entgeddings не забудьте установить sparse параметр в False . В настоящее время поддерживаемыми оптимизаторами являются Sparseadam, Adadelta, Adamax, Adam, Adamw, ASGD и RMSProp. RPROP также инцидент, но нуждается в первом переходном проходе, а loss.backward() , который будет выполнен для инициализации экземпляра OptimizerFactory. Это связано с тем, что оптимизатор RProp, нуждающийся в градиентах его параметров для инициализации.
total_classes : общее количество встроенных встроений, которые будут обучены.
embed_dimension : измерение встроенных.
model : экземпляр вашей модели.
variable_name : точное имя переменной, определенной в вашей модели.
dtype (необязательно): тип данных вашей переменной. По умолчанию «float32»
CPUPinn (необязательно): прикрепите полную коллекцию веса переменной оптимизации в процессоре. Запасы памяти графического процессора, но передача данных будет медленнее. По умолчанию ложь.
Методы:
optInit : инициализирует коммутатор переменной оптимизатора.
beforeForwardPass(retrievedPosIndexes , retrievedNegIndexes = None) : переключает вариабельные веса оптимизатора от полного сбора веса на тензор оптимизатора. retrievedPosIndexes - это показатели положительных образцов, которые необходимо извлечь. Если также необходимо извлечь отрицательные выборки, также может быть проведено значение для retrievedNegIndexes .
afterOptimizerStep( retrievedPosIndexes , retrievedNegIndexes = None) : переключает весовые веса оптимизатора от вашего оптимизатора на полную коллекцию веса. retrievedPosIndexes - это показатели полученных положительных образцов. Если также были извлечены отрицательные выборки, также может быть проведено значение для retrievedNegIndexes .
Создает тензор, основная функция которого - перенести его содержимое в переменную Pytorch CUDA.
DataGadget( fileName, CPUPinn=False)
Аргументы:
fileName : местоположение файла данных .npy для открытия
CPUPinn : (необязательно): прикрепите свои данные в процессор. По умолчанию ложь.
Методы:
getData(indexes) : извлекает данные в формате, который готов к принятию переменной Pytorch CUDA. indexes являются индексами тензора, из которого можно получить данные.
insertData(dataObject, indexes) : вставьте данные из переменной Pytorch CUDA. dataObject - это данные тензора с переменной формы Pytorch CUDA, из которых будут поиск данных, из которых будут поиска, и indexes тензора, из которого можно извлечь данные.
saveCupy(saveFileName) : Сохраните тензор в .npy file.
loadCupy(loadFileName) : Загрузите новый тензор из .npy File.
getNumpyVersion : Получите версию Tensor Numpy.
Пожалуйста, смотрите эту записную книжку о том, как использовать гаджет данных
https://colab.research.google.com/drive/185z5gi62azxh-eemfrttjqxeifhobxxf
PytorchModelFactory ( model_variable , total_classes , embed_dimension , datatype = 'float32' , deviceType = 'cuda' , pinType = False )Создает коммутаторы для переменных моделей с использованием тензоров Pytorch. Переключает переменные из вашей коллекции полного встраивания и вашей коллекции моделей. Каждая переменная нуждается в своем собственном переключателе.
Пример:
uEmbed_switcher = SpeedTorch . PytorchModelFactory ( skip_gram_modelSparse . u_embeddings , total_classes = 50000 , embed_dimension = 128 )Аргументы:
model_variable : конкретная переменная из вашей модели, для которой вы хотели бы создать коммутатор.
total_classes : общее количество встроенных встроений, которые будут обучены.
embed_dimension : измерение встроенных.
datatype (необязательно): dataType для переменной. По умолчанию «float32».
deviceType (необязательно): установить устройство либо в Cuda, или «CPU». По умолчанию «cuda»
pinType (необязательно): если устройство установлено в «ЦП», вы можете указать, используя закрепленную память. По умолчанию «ложь».
Методы:
zerosInit() : инициализирует полную коллекцию переменной коммутатора с помощью нулей:
uniformDistributionInit(low, high) : инициализирует полную коллекцию переменной коммутатора с равномерным распределением от low до high
normalDistributionInit(mean, stdDev) : инициализирует полную коллекцию переменного коммутатора с нормальным распределением со средним mean и стандартным отклонением stdDev
customInit(initFunction, *args) : используйте любой инициализатор Pytorch для полной коллекции переменных коммутаторов. Пропустите инициализатор, используя initFunction и соответствующие аргументы, используя *args .
variableTransformer(batchSize, posPerBatch, negPerBatch = None ) : устанавливает фиктивный вход, который будет использоваться для прямого этапа вашей модели. batchSize - это размер вашей партии, а posPerBatch - это количество положительных примеров на партию. Если для отрицательных примеров необходим второй манекен -ввод, negPerBatch (необязательно) может быть установлен на количество отрицательных примеров, а вместо одного будет возвращаться два фиктивных входа.
beforeForwardPass(retrievedPosIndexes , retrievedNegIndexes = None) : переключатели встраивания из коллекции Full Enterdings в ваши модели Enterdings. retrievedPosIndexes - это показатели положительных образцов, которые необходимо извлечь. Если также необходимо извлечь отрицательные выборки, также может быть проведено значение для retrievedNegIndexes .
afterOptimizerStep(retrievedPosIndexes , retrievedNegIndexes = None) : переключатели обновлены встроены из вашей модели в коллекцию Full Engeddings. retrievedPosIndexes - это показатели полученных положительных образцов. Если также были извлечены отрицательные выборки, также может быть проведено значение для retrievedNegIndexes .
saveTorch(saveFileName) : Сохраните тензор для файла, используя Torch.save
loadTorch(loadFileName)
getNumpyVersion : Получите версию Tensor Numpy.
PytorchOptimizerFactory( given_optimizer, total_classes, embed_dimension, model, variable_name, dtype='float32', deviceType = 'cuda', pinType = False)
Создает коммутаторы для переменных оптимизатора с использованием тензоров Pytorch. Переключает переменные из вашей коллекции полного встраивания и вашей коллекции оптимизатора. Каждая переменная нуждается в своем собственном переключателе.
Пример:
uAdagrad_switcher = SpeedTorch . PytorchOptimizerFactory ( given_optimizer , total_classes , embed_dimension , model , variable_name , dtype = 'float32' )Аргументы:
given_optimizer : оптимизатор инициализируется с весами модели. При использовании для обучения Entgeddings не забудьте установить sparse параметр в False . В настоящее время поддерживаемыми оптимизаторами являются Sparseadam, Adadelta, Adamax, Adam, Adamw, ASGD и RMSProp. RPROP также инцидент, но нуждается в первом переходном проходе, а loss.backward() , который будет выполнен для инициализации экземпляра OptimizerFactory. Это связано с тем, что оптимизатор RProp, нуждающийся в градиентах его параметров для инициализации.
total_classes : общее количество встроенных встроений, которые будут обучены.
embed_dimension : измерение встроенных.
model : экземпляр вашей модели.
variable_name : точное имя переменной, определенной в вашей модели.
dtype (необязательно): тип данных вашей переменной. По умолчанию «float32»
deviceType (необязательно): установить устройство либо в Cuda, или «CPU». По умолчанию «cuda»
pinType (необязательно): если устройство установлено в «ЦП», вы можете указать, используя закрепленную память. По умолчанию «ложь».
Методы:
optInit : инициализирует коммутатор переменной оптимизатора.
beforeForwardPass(retrievedPosIndexes , retrievedNegIndexes = None) : переключает вариабельные веса оптимизатора от полного сбора веса на тензор оптимизатора. retrievedPosIndexes - это показатели положительных образцов, которые необходимо извлечь. Если также необходимо извлечь отрицательные выборки, также может быть проведено значение для retrievedNegIndexes .
afterOptimizerStep( retrievedPosIndexes , retrievedNegIndexes = None) : переключает весовые веса оптимизатора от вашего оптимизатора на полную коллекцию веса. retrievedPosIndexes - это показатели полученных положительных образцов. Если также были извлечены отрицательные выборки, также может быть проведено значение для retrievedNegIndexes .
Если вы используете Speedtorch в своем исследовании или хотите процитировать, пожалуйста, цитируйте:
@misc {
title = {speedtorch},
Автор = {Сантош Гупта},
HowPublished = { url {github.com/santosh-gupta/speedtorch}},
Год = {2019}
}