PANICCODE Telegram 42
Use this simple trick to speedup catboost preparing dataset up to 210 times (21000%)

Я недавно оптимизировал пайплайн обучения катбуста, и наткнулся на странную вещь: инициализация catboost.Pool занимает ну адски много времени (больше, чем обучение), хотя я ему передаю подготовленные нампай массивы в идеальном виде, и казалось бы ему надо просто указатель скопировать.
Гуглеж почему он может занимать много времени или как это ускорить не выдал абсолютно ничего, что сделало эту проблему еще веселее

Т.к. идей у меня больше не было, пришлось идти писать тестовый скрипт и pprofать его, и... ну я нашел проблему, больше сказать нечего

Оказывается, катбуст умеет копировать указатель только в одном очень аккуратном супер идеальном случае: это numpy массив (пока pyarrow), массив именно np.float32, и он непрерывный. В целом разумно, тут проблем нет.
Вопрос в том, что будет, если вы не дай бог передадите np.float64? Катбусту же много лет, над ним трудится куча студентов людей, и все простые оптимизации уже были наверняка сделаны, подумаете вы

...

for i in range(len(x)):
if type(x[i]) == float:
res[i] = x[i]

(буквально это но на cython)

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

Короче дамы и господа, передавайте катбусту только numpy массивы и только float32, и будет вам счастье.
А я сделал им ишью и буду ждать когда они скажут, что это я дурак а они молодцы UPD: они согласились что это надо пофиксить!!!
🔥6😁5🤡1



tgoop.com/paniccode/42
Create:
Last Update:

Use this simple trick to speedup catboost preparing dataset up to 210 times (21000%)

Я недавно оптимизировал пайплайн обучения катбуста, и наткнулся на странную вещь: инициализация catboost.Pool занимает ну адски много времени (больше, чем обучение), хотя я ему передаю подготовленные нампай массивы в идеальном виде, и казалось бы ему надо просто указатель скопировать.
Гуглеж почему он может занимать много времени или как это ускорить не выдал абсолютно ничего, что сделало эту проблему еще веселее

Т.к. идей у меня больше не было, пришлось идти писать тестовый скрипт и pprofать его, и... ну я нашел проблему, больше сказать нечего

Оказывается, катбуст умеет копировать указатель только в одном очень аккуратном супер идеальном случае: это numpy массив (пока pyarrow), массив именно np.float32, и он непрерывный. В целом разумно, тут проблем нет.
Вопрос в том, что будет, если вы не дай бог передадите np.float64? Катбусту же много лет, над ним трудится куча студентов людей, и все простые оптимизации уже были наверняка сделаны, подумаете вы

...

for i in range(len(x)):
if type(x[i]) == float:
res[i] = x[i]

(буквально это но на cython)

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

Короче дамы и господа, передавайте катбусту только numpy массивы и только float32, и будет вам счастье.
А я сделал им ишью и буду ждать когда они скажут, что это я дурак а они молодцы UPD: они согласились что это надо пофиксить!!!

BY Panic! At the 0xC0D3


Share with your friend now:
tgoop.com/paniccode/42

View MORE
Open in Telegram


Telegram News

Date: |

Hui said the time period and nature of some offences “overlapped” and thus their prison terms could be served concurrently. The judge ordered Ng to be jailed for a total of six years and six months. As the broader market downturn continues, yelling online has become the crypto trader’s latest coping mechanism after the rise of Goblintown Ethereum NFTs at the end of May and beginning of June, where holders made incoherent groaning sounds and role-played as urine-loving goblin creatures in late-night Twitter Spaces. fire bomb molotov November 18 Dylan Hollingsworth yau ma tei But a Telegram statement also said: "Any requests related to political censorship or limiting human rights such as the rights to free speech or assembly are not and will not be considered." The visual aspect of channels is very critical. In fact, design is the first thing that a potential subscriber pays attention to, even though unconsciously.
from us


Telegram Panic! At the 0xC0D3
FROM American