Как ограничить ноутбук Julia одним ядром?

Вопрос или проблема

Я запускаю ноутбук Julia 1.4 через Jupyter lab. Мне нужно ограничить ноутбук одной логической ядрой CPU в среднем.

В Python я использую следующее заклинание, чтобы ограничить использование CPU Numpy:

from threadpoolctl import threadpool_info,threadpool_limits
with threadpool_limits(limits=1, user_api='blas'):
    >> код здесь <<

Кто-нибудь знает, возможно ли аналогично ограничить использование CPU Julia изнутри ноутбука?

Если высокое использование CPU вызвано параллелизированными линейными алгебраическими процедурами, ограничение использования CPU линейного алгебраического интерпретатора помогает. Для Julia 1.4, собранной для использования BLAS, следующее ограничивает её до одного ядра:

using LinearAlgebra; 
BLAS.set_num_threads(1);

(Многие публикации на форумах рекомендуют blas_set_num_threads(1) для старых версий Julia. Похоже, это устарело)

Ответ или решение

Чтобы ограничить использование Julia Notebook (ноутбук на Julia 1.4) до одного логического ядра процессора, можно воспользоваться встроенными возможностями управления потоками, которые предоставляет язык Julia, особенно когда дело касается многопоточных применений для линейной алгебры. Ниже приведены пошаговые инструкции, как это сделать.

1. Понимание проблемы

Если ваша задача в Julia использует многопоточность при выполнении математических операций, таких как матричные вычисления через библиотеку BLAS, это может приводить к высокому использованию CPU. В частности, Julia может задействовать все доступные ядра, что не всегда желательно в целях выделения ресурсов для других процессов или для учета особенностей выполнения кода.

2. Ограничение потоков BLAS

Для ограничения количества потоков для библиотек линейной алгебры, используемых Julia, вы можете использовать следующий код:

using LinearAlgebra
BLAS.set_num_threads(1)

Этот вызов указывает библиотеке BLAS использовать только одно ядро для выполнения всех операций линейной алгебры, что существенно снизит общее использование процессора.

3. Ввод кода в Jupyter Notebook

Вам необходимо вставить данный код в вашу ячейку Jupyter Notebook перед выполнением каких-либо вычислений, которые могут задействовать многопоточность. Таким образом, вы гарантируете, что все последующие операции будут выполняться с учетом установленного ограничения.

4. Альтернативные методы

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

Threads.@threads for i in 1:10
    # Ваш код здесь
end

Обратите внимание, что при использовании макроса @threads вы можете вручную контролировать количество потоков, которое вы хотите использовать.

5. Другие библиотеки

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

Заключение

Ограничение Julia Notebook до одного логического ядра выполняется простым вызовом функции BLAS.set_num_threads(1). Это решение эффективно для большинства сценариев, когда высокое использование CPU связано с операциями в области линейной алгебры. Убедитесь, что вы помещаете этот код в начало вашего ноутбука, чтобы гарантировать, что он будет охватывать все важные вычисления, которые вы планируете выполнять.

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

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

Капча загружается...