Подтвердить что ты не робот

Как кэшировать в IPython Notebook?

Окружающая среда:

  • Python 3
  • IPython 3.2

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

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

Я посмотрел на ipycache, но, похоже, он кэширует ячейку вместо ноутбука. Есть ли копия кэша knitr в IPython?

4b9b3361

Ответ 1

Можете ли вы привести пример того, что вы пытаетесь сделать? Когда я запускаю что-то в ноутбуке IPython, что дорого, я почти всегда пишу его на диск после слова. Например, если мои данные являются списком объекта JSON, я записываю его на диск как строки, отформатированные в формате JSON:

with open('path_to_file.json', 'a') as file:
    for item in data: 
        line = json.dumps(item)
        file.write(line + '\n')

Затем вы можете считывать данные так же:

data = []
with open('path_to_file.json', 'a') as file:
    for line in file: 
        data_item = json.loads(line)
        data.append(data_item)

Я думаю, что это хорошая практика вообще, потому что она предоставляет вам резервную копию. Вы можете также использовать маринованные овощи для того же самого. Если ваши данные действительно большие, вы можете фактически gzip.open напрямую писать в zip файл.

ИЗМЕНИТЬ

Чтобы сохранить модель обучения scikit на диске, используйте joblib.pickle.

from sklearn.cluster import KMeans

km = KMeans(n_clusters=num_clusters)
km.fit(some_data)


from sklearn.externals import joblib
# dump to pickle
joblib.dump(km, 'model.pkl')

# and reload from pickle
km = joblib.load('model.pkl')

Ответ 2

На самом деле, запрашиваемая вами функция уже есть, и вам не нужно повторно реализовывать ее вручную, выполняя свои дампы.

Вы можете использовать% store или, может быть, лучше %% cache magic (extension) для хранения результатов этих ячеек с перерывами, чтобы их не нужно было пересчитывать (см. https://github.com/rossant/ipycache)

Это так же просто, как:

%load_ext ipycache

Затем в ячейке, например:

%%cache mycache.pkl var1 var2
var1 = 1
var2 = 2

Когда вы выполняете эту ячейку в первый раз, код выполняется, и переменные var1 и var2 сохраняются в mycache.pkl в текущем каталог вместе с выходами. Богатые выходные данные только сохраняются если вы используете версию разработки IPython. Когда вы выполните это ячейка снова, код пропущен, переменные загружаются из файл и вводится в пространство имен, а выходные данные восстанавливаются в тетрадь.

Он сохраняет всю графику, полученный результат и все переменные, указанные автоматически для вас :)

Ответ 3

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

В вашем ноутбуке Jupyter:

a = 1
%store a

Теперь скажем, что вы закрываете ноутбук, и ядро ​​перезапускается. У вас больше нет доступа к локальным переменным. Однако вы можете перезагрузить переменные, которые вы сохранили, с помощью параметра -r.

%store -r a
print a # Should print 1

Ответ 4

Используйте магию кеша.

%cache myVar = someSlowCalculation(some, "parameters")

Это вычислит someSlowCalculation (some, "parameters") один раз. И при последующих вызовах он восстанавливает myVar из хранилища.

https://pypi.org/project/ipython-cache/

Под капотом он делает то же самое, что и принятый ответ.