Nano Hash - криптовалюты, майнинг, программирование

Каковы разные варианты использования joblib и pickle?

Предыстория: я только начинаю работать с scikit-learn и читаю внизу страницы информацию о joblib вместо pickle.

может быть интереснее использовать замену pickle в joblib (joblib.dump & joblib.load), которая более эффективна для больших данных, но может копировать только на диск, а не на строку

Я прочитал эти вопросы и ответы по Pickle, Общие варианты использования рассола в Python и интересно, может ли сообщество здесь поделиться различиями между joblib и pickle? Когда следует использовать одно вместо другого?


Ответы:


1
27.09.2012
  • Большое спасибо! Это полезно. 27.09.2012
  • Означает ли это, что мы должны использовать Joblib вместо Pickle? Какие недостатки Joblib мы должны учитывать? Я только недавно услышал о Joblib, и мне это кажется интересным. 31.01.2019
  • Я обновил свой ответ, указав на недостатки и новые вещи, происходящие в стандартной библиотеке. 31.01.2019
  • Выполняет ли joblib произвольный код во время разборки? (Небезопасно) 24.03.2020
  • Трудно прочитать все примечание, что ... и получить однострочное резюме: joblib в X раз быстрее записывает большие массивы numpy в 3.8, примерно что такое X? а читать? а pickle примерно в Y раз быстрее пишет множество небольших объектов Python, что такое Y? и читать? Кроме того, каковы относительные степени сжатия / размеры файлов? 15.06.2020
  • По умолчанию ни joblib, ни pickle не сжимают данные. Так что размер файла примерно такой же, как у массива в памяти. Но вы можете выполнить дамп в объект сжатого файла в обоих случаях (например, docs. python.org/3/library/gzip.html#gzip.GzipFile). У joblib также есть способ сделать это на высоком уровне: joblib.readthedocs. io / en / latest / Степень сжатия зависит от данных в массиве (случайное = ›низкое сжатие, обычное / постоянное =› высокое). 21.06.2020

  • 2

    Спасибо Gunjan за предоставленный нам этот сценарий! Я модифицировал его для результатов Python3

    #comapare pickle loaders
    from time import time
    import pickle
    import os
    import _pickle as cPickle
    from sklearn.externals import joblib
    
    file = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'database.clf')
    t1 = time()
    lis = []
    d = pickle.load(open(file,"rb"))
    print("time for loading file size with pickle", os.path.getsize(file),"KB =>", time()-t1)
    
    t1 = time()
    cPickle.load(open(file,"rb"))
    print("time for loading file size with cpickle", os.path.getsize(file),"KB =>", time()-t1)
    
    t1 = time()
    joblib.load(file)
    print("time for loading file size joblib", os.path.getsize(file),"KB =>", time()-t1)
    
    time for loading file size with pickle 79708 KB => 0.16768312454223633
    time for loading file size with cpickle 79708 KB => 0.0002372264862060547
    time for loading file size joblib 79708 KB => 0.0006849765777587891
    
    15.05.2018
  • Гунджан использовал файл pickle 1154320653 КБ. Может ли файл большего размера иметь значение в пользу joblib? 07.06.2019
  • Пожалуйста, всегда указывайте вашу версию Python при отображении показателей производительности. 2.6? 2.7? 3.6? 3,7? Еще лучше, сообщите относительные числа joblib vs pickle vs cPickle. Также исправьте ошибку Гунджана в 1,1 ГБ, а не в 1,1 ТБ. 15.06.2020

  • 3

    Я столкнулся с тем же вопросом, поэтому я попробовал этот (с Python 2.7), так как мне нужно загрузить большой файл рассола.

    #comapare pickle loaders
    from time import time
    import pickle
    import os
    try:
       import cPickle
    except:
       print "Cannot import cPickle"
    import joblib
    
    t1 = time()
    lis = []
    d = pickle.load(open("classi.pickle","r"))
    print "time for loading file size with pickle", os.path.getsize("classi.pickle"),"KB =>", time()-t1
    
    t1 = time()
    cPickle.load(open("classi.pickle","r"))
    print "time for loading file size with cpickle", os.path.getsize("classi.pickle"),"KB =>", time()-t1
    
    t1 = time()
    joblib.load("classi.pickle")
    print "time for loading file size joblib", os.path.getsize("classi.pickle"),"KB =>", time()-t1
    

    Выход для этого

    time for loading file size with pickle 1154320653 KB => 6.75876188278
    time for loading file size with cpickle 1154320653 KB => 52.6876490116
    time for loading file size joblib 1154320653 KB => 6.27503800392
    

    В соответствии с этим joblib работает лучше, чем модуль cPickle и Pickle из этих трех модулей. Спасибо

    07.08.2014
  • Я думал, cpickle должен быть быстрее, чем pickle? 01.05.2016
  • Выполнен ли этот тест с помощью python 3, который по умолчанию использует pickle (protocol = 3) (что быстрее, чем значение по умолчанию в python2)? 15.09.2017
  • os.path.getsize возвращает байты, а не килобайты, поэтому мы говорим о файле размером примерно 1,1 ГБ (а не 1,1 ТБ, как кажется на выходе) 03.04.2019
  • Это здорово, но, пожалуйста, исправьте вывод, чтобы он отображал 1,1 ГБ, а не 1,1 ТБ. Еще лучше было бы построить сравнительные числа для размеров файлов в степенях 10 от 1 КБ ... 10 ГБ для Python версий 3.6, 3.7, 3.8 и 2.7, для joblib, pickle и cPickle. 15.06.2020
  • Новые материалы

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

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

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

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..