Разное

Как правильно циклевать паркет: Правильная циклевка старого паркета своими руками

Содержание

Правильная циклевка старого паркета своими руками

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

Что такое циклевка старого паркета своими руками и как ее выполнить!

Как сделать циклевку паркета самостоятельно, и что для этого нужно? Существует несколько видов шлифовальной техники и каждая из них, зачем-то нужна. Чтобы выполнить все своими руками и остаться довольным, читайте эту статью!  

Все фотографии на сайте — это наши работы!

Нажав сюда, Вы можете увидеть адреса и фотографии последних наших работ

Циклевать старый пол самостоятельно надо уметь!

Мы написали эту статью, чтобы Вы имели представление о том, что это, и как это качественно сделать!

Смотрите фотографии циклевки паркета до и после!

Сначала деревянный пол обрабатывается барабанной машиной, типа СО-2, или ленточной, типа Hummel.

Отличие между ними в абразивной ленте и технике ее заправки. На СО-2 лента зажимается поперечными вальцами и это место на барабане более плотное, следовательно, в процессе циклевки место зажима будет оказывать дополнительное давление на покрытие, что может привести к появлению «дроби», особенно на мягких породах дерева. На машине Hummel абразивная лента клееная и одевается на два шкива, т.е. как бы бесконечная и обработка полов более равномерна. По технике циклевки и присутствию пыли в процессе работы машины практически идентичны, даже Хумелем сделать «яму» проще, т.к. площадь соприкосновения абразива с полом у него меньше.

Циклевка старого паркета, или как правильно отциклевать паркет самому?

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

Каждый абразив удаляет полоски, риски и т.д. предыдущего абразива, но оставляет свои, следовательно, надо закончить обрабатывать мелкой шкуркой, чтобы полоски были не видны при лакировке-это называется шлифовка паркета. Надо понять, что номер P40 уберет полоски, оставленные P36,а вот если вместо P40 для экономии вы пройдете P80, полосы от грубого зерна будут видны.

В свете вышесказанного, перед вами стоит задача выбора первого номера абразива так, чтобы выполнить поставленную задачу и при этом нанести наименьшие воздействия на пол. Как это сделать? Тут решающее значение имеет опыт и мастерство! Циклюя самостоятельно в первый раз, начинайте с самого «ненужного» помещения. Перейдя на основное, успеете преобрести хоть какой-нибудь, да опыт!

Теперь о том, как грамотно провести мероприятия по циклевке! Итак, определившись с первым номером абразива можно приступать к циклевке. Если лак «тяжелый», его много, пол неровный лучше всего начинать движение под 45 градусов от направления клепок или досок, затем опять под 45 градусов, но в другую сторону и потом по направлению света, т.

е. от окна. Опускать и поднимать барабан надо очень плавно и в движении, чтобы не оставлять ям. Это одна из основных ошибок, стоит дать машине поработать на месте хоть пол секунды, как сразу получите яму, которая проявится при лакировке! На этот момент следует обратить особое внимание!!!! При работе первым абразивом лучше тащить машину на себя, двигаясь спиной вперед, а возвращаться назад вхолостую. В дальнейшем циклевать пол можно в обоих направлениях. Внимание! Во время движения лицом вперед надо придерживать машину, при движении на себя наоборот тащить. Циклюя полы, мастер должен перекрывать каждым новым проходом предыдущий на треть!

Итак, циклевка машиной закончена, но что делать с примыканиями! То есть с местами вдоль стен, куда вы не смогли подъехать циклевочной машиной. В этом случае используются угловые машины типа «Flip» или на крайний случай УШМ с насадкой. В принципе ничего сложного, главное правильно менять абразив, работать плавно, не торопливо, не пытаться давить на машинку, не нагибать ее углом. Как говориться, торопливость нужна при ловле блох, обрабатывая примыкания можно так изрезать паркет, что не каждый мастер сможет исправить. Обработку примыканий можно проводить в середине процесса, можно в конце.

Вот циклевка паркета видео:


Теперь рассмотрим что это за машина ТРИО и зачем она нужна! Это плоскошлифовальная машина, которая обрабатывает поверхность пола плоскостью. Она имеет вращающуюся плоскость, на которую крепятся три диска с абразивом, крутящихся в противоположную сторону. На ней также используются абразивы разных номеров, последовательность смены которых нельзя нарушать. Эта машина обрабатывает за раз большую площадь с меньшим давлением, что позволяет лучше вышлифовать пол. После обработки паркет или доска становятся более ровными и гладкими, структура древесины лучше проявляется, хотя если вы надеетесь выровнять покрытие или снять старый слой лака, используя лишь ТРИО, Вы будете неприятно удивленны, как сложно это сделать.

По большому счету, она лишь доводочная машина. Используя, необходимо плавно шлифовать помещение, не торопясь, но и не стоять на одном месте. Расход абразива одна заправка на 15-20м.кв. Чем агрессивнее лак, которым собираются лакировать, чем сложнее и экзотичнее древесина, не говоря уже про тонировку, тем более мелким абразивом надо заканчивать шлифовку, иногда приходится проходить специальными сетками номеров 180 или 220. Мысль о том, что ТРИО не может испортить работу наивна, эта машина тоже может оставить риски и полоски, которые проявятся при лакировке или при тонировке (смотрите пример ошибок тонировки паркета ). Давление на пол машины так мало, что ее можно использовать для межслоевой шлифовки с помощью специальных сеток.

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

Вывод: сделать можно, но для получения прекрасного результата, при этом избавив себя от головной боли, обращаться надо к профессионалам!

Как циклевать паркет своими руками (самому вручную

Со временем лаковое покрытие паркетной доски стирается. На плашках могут появиться царапины и щербины. Это значит, что пришла пора паркет обновить, восстановив не только его внешний вид, но и защитное покрытие. Как правильно циклевать паркет своими руками – читайте в нашей статье. А сам паркет можно посмотреть тут.

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

  1. Полностью освобождаем комнату от мебели, демонтируем плинтус. Паркет перед шлифовкой не моем.
  2. Удаляем старое покрытие и неровности (грубая циклевка) с помощью паркетошлифовальной машины барабанного или ленточного типа и крупных абразивов № 24-40. Периметр, углы и труднодоступные места обрабатываем углошлифовальной машиной.
  3. После грубой шлифовки на поверхности дерева могут остаться волнообразные следы и даже царапины. Они удаляются на следующем этапе шлифовки абразивом со средней зернистостью (№ 60-80). Заодно окончательно удалятся остатки старого покрытия.
  4. Для следующего этапа шлифовки нам понадобится абразив № 100, 120 или 150. Прежде чем браться за этот этап, освобождаем пылесборник шлифмашины. Собранная при помощи тонкого абразива пыль понадобится нам для изготовления шпатлевки.
  5. Шпатлевание щелей, трещин, выпавших сучков, сколов. В качестве заполнителя можно использовать пыль, собранную после тонкой шлифовки и специальную связующую смолу. Смешав два этих ингредиента (в пропорциях, указанных в инструкции к смоле), вы получите шпатлевку, идеально соответствующую цвету вашего паркета.
  6. После полного высыхания шпатлевки производим финишную шлифовку (полировку) паркета, которая сделает поверхность пола абсолютно гладкой и удалит остатки шпатлевки.
  7. Тщательно обеспыливаем помещение и шпателем, S-образными движениями наносим слой грунтовочного лака. Грунтовка снижает гигроскопичность древесины и не дает ей изменить цвет от прямого контакта с лаком.

    Специальные грунтовки для паркета бывают нескольких видов. Выбирать их нужно с учетом вида древесины. Однокомпонентная нитрогрунтовка подойдет для гигроскопичной древесины (дуб, орех, ироко). Полиуретановые грунтовки идеальны для дерева с высоким содержанием смол и масел (экзотические породы – тик, палисандр). Для древесины светлых сортов можно подобрать осветляющие виниловые грунтовки или специальные грунтовки с защитой от ультрафиолета.

  8. После грунтовки может понадобиться межслойная шлифовка. Она делается для удаления поднявшегося во время грунтовки ворса. Используем тонкий абразив, которым пользовались для финишной шлифовки паркета.
  9. Обеспыливаем помещение после межслойной шлифовки.
  10. Лакируем поверхность в 3-5 слоев. Для нанесения лака используют валик, широкую кисть или краскопульт. Очень важно следовать инструкции по применению купленного вами лака и соблюдать время для отвердевания каждого слоя.

 

Как циклевать паркет вручную, без шлифовальной машины?

Для этого можно использовать ручную циклю. Она подойдет также для восстановления небольших участков паркета. Работать начинаем от центра комнаты к стенам. Каждый участок необходимо пройти в двух направлениях. После первичной шлифовки паркета вручную используем шкурки разной зернистости – от грубой к тонкой.

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

Правильная циклевка паркета — на какой стадии ремонта выполняется?

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

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

Когда стоит начинать ремонтировать пол?

Любой паркет является очень чувствительным к влажности. Именно поэтому специалисты рекомендуют сразу завершить все влажные работы по ремонту, а потому уже браться за деревянный пол. К подобным работам относится классическая шпаклевка стен, покраска и укладка плитки. Комфортным показателем влажности для ремонта паркета является 40-60%. Именно поэтому после вышеперечисленных работ необходимо подождать несколько дней, чтобы показатели влаги немного снизились.


При любом ремонте владельцу жилья необходимо дождаться снижения влажности, чтобы перейти к восстановлению деревянного пола. Соответственно, вам стоит заранее подумать какие процедуры могут повысить показатели влажности. Сразу придется сделать их, а потом подождать несколько дней и перейти к паркету. Что касается возможного ущерба отремонтированным элементам помещения, который может возникнуть если делать циклевку после них, то тут можно вообще не переживать. Профессиональные мастера все делают так, что вся территория вокруг пола остается нетронутой. Даже немного пыли не попадет при циклевке на обои или потолок.

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

Как и чем циклевать и шлифовать паркет своими руками

share.in Facebook share.in Telegram share.in Viber share.in Twitter

Среди всех материалов напольного покрытия, самым эстетичным и уютным для большинства владельцев квартир по сей день остается деревянный паркет. Действительно, древесина идеально подходит для создания атмосферы уюта в любой комнате, но при ее использовании в декоре Вашей жилой площади возникает весьма важный вопрос – как сохранить красоту материала и увеличить срок «жизни» пола?

Содержание:

  1. Циклевка и шлифовка паркета, в чем разница?
  2. Как циклевать паркет
  3. Как шлифовать пол

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

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

Циклевка и шлифовка паркета, в чем разница?

Итак, что же такое собственноручная циклевка паркета? Это снятие устаревшего и поврежденного слоя с напольного покрытия при помощи как ручного, так и электрического инструмента. Заточенная пластина из металла в таких приборах снимает деревянную стружку с пола, но такая работа трудная и долгая. Также при отсутствии должного умения циклёвка паркета получится более низкокачественной, потому что этот процесс требует определенных практических навыков.

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

Но все же давайте разберемся в этих вопросах более детально.

Как циклевать паркет

Выше мы разобрались что же это за процесс, теперь рассмотрим вопрос: когда же паркету требуется грубая циклевка?

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

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

  • Первое что нужно сделать — вынести всю мебель из комнаты, а плинтуса попросту демонтировать.
  • Далее следует подготовка пола, которая состоит из уборки мусора, а потом увлажнения паркета.
  • Теперь пол готов и поделив периметр на несколько полос можно начинать обработку. Поступательными равномерными движениями нужно снимать старый слой древесины, сначала вдоль волокон, а после в противоположную сторону.

Но если у вас попросту нет пары свободных дней на обработку пола? Тогда давайте разберем как же правильно циклевать паркет своими руками с помощью специальной машины?

Начнем с того, что такая циклёвка отличается от ручной, ведь гораздо выгоднее выполнить её с помощью барабанной или ленточной шлифовальной машины, оснащенной крупнозернистой наждачной бумагой ( от 24 до 40 Р). В таком случае пара дней работы превратятся во всего лишь несколько часов.

Единственным важным вопросом остается лишь проверка электросети в квартире. Если напряжение не достигает 220 Вт, то нужно подключать машину напрямую к электрощиту.

А вот уже способ работы мало отличается от ручного:

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

Вот и все, пол отциклёван и полностью готов к шлифовке.

Как шлифовать пол

Итак, старый слой снят и теперь можно продолжать процесс обновления паркета.

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

Этот процесс, в особенности после циклёвки должен проходить в несколько этапов и совершаться нужным инструментом. Чем же люди предпочитают обновлять паркет? Этот процесс может совершаться с помощью:

Каждый вид прибора подойдет для решения определенных задач и стоит детально разобрать, какой агрегат для чего нужен:

Ленточная шлифовальная машина идеально подойдет для обработки пола по всей площади. Ширина ленты и принцип работы позволяют быстро и легко справиться даже с довольно большой площадью обновляемого паркета.

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

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

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

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

  • Шлифовка осуществляется в диагональном направлении по отношению к укладке покрытия. Перед самим процессом весьма важно правильно подобрать давление наждачной бумаги на поверхность, с которой Вы работаете. От этого зависит качество выполненной работы, ведь недостаточное давление приводит к неровностям и остаткам поврежденной древесины.
  • Шлифовка должна происходить таким образом, чтобы в процессе каждая следующая пройденная дорожка перекрывала предыдущую на пару сантиметров.
  • Скорость работы с машиной должна быть средней. Если пустить ее слишком быстро или медленно, на паркете останутся выпуклости и углубления.
  • В случае внезапного замедления работы шлифмашины, стоит убавить давление инструмента на поверхность.

Теперь можно приступать к первому этапу поверхностной шлифовки:

  • Подберите абразив с зернистостью Р60 или Р80;
  • С помощью поступательных равномерных движений обработайте основную часть напольного покрытия;
  • Далее следует отделка углов и труднодоступных мест;
  • Снова пройдитесь и осмотрите пол после работы.

Перед последним этапом нужно зашпаклевать любую щель или зазор с помощью мастики, или смеси с древесной пылью, которая осталась после циклевки и шлифования.

И вот работа уже на финишной прямой.

Способ чистовой отделки не изменен, единственное что отличается – зернистость абразива, которая теперь должна быть от Р100 до Р120.

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

Вот и все, работа окончена, а напольное покрытие выглядит прекрасно, как новое. Остается лишь один важный вопрос, когда снова придется циклевать паркет? Достаточно повторять вышеописанные действия раз в 6 или даже 8 лет.

Надеемся, что эта статья поможет всем людям, которые решили обновить напольное покрытие своими руками. А в случае отсутствия нужного инструмента, ждем вас на официальном сайте Dnipro-M. Множество электроинструментов и расходных материалов, их описания, характеристики и самое главное – отзывы довольных покупателей, все это поможет как любителю, так и профессионалу в выполнении работ любой сложности. Циклевать и шлифовать своими руками с подходящим инструментом — легко и просто.

технология и выбор инструментов, фото примеры как правильно шлифовать паркет, а также видео инструкция циклевки пола

Хотя паркет и считается одним из самых красивых и долговечных напольных покрытий в интерьере, но он требует регулярного ухода. Кроме обработки специальными средствами для улучшения внешнего вида настила и дополнительной защиты от разрушения, периодически следует обновлять его поверхность – проводить ремонт , шлифование и циклевание паркета. Объем необходимых реставрационных работ определяется степенью нагрузки на пол, а также его износа.

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

Зачем нужна циклевка паркета

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

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

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

Внимание:  методы циклевки и шлифовки не подходят для капитального ремонта паркета, а только для выравнивания и реконструкции его поверхности.  Ремонт паркета, циклевка – фото до и после

Технология циклевки и шлифовки паркета

Роль циклевания не только в снятии верхнего слоя покрытия, во время шлифовки убираются все загрязнения, царапины, микротрещины.

Шлифовка настила имеет определенные ограничения. Количество сеансов зависит от толщины планок. Так для планок толщиной 15 мм допустимо 5 шлифовок, для более тонких – не более 3 раз.

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

Циклевка поверхности может выполняться:

  • вручную;
  • автоматически – при помощи специального оборудования.
Инструменты и приспособления для циклевки паркета своими руками

Шлифование поверхности осуществляется наждачной бумагой, при помощи которой можно выровнять поверхность, сняв верхний слой древесины.

Как циклевать паркет своими руками правильно? Существует несколько режимов циклевки, выбор которых зависит от породы древесины, степени ее твердости.

Учтите:  тонкий слой древесины можно снять и вручную. Но если требуются более глубокие и точные работы, то без шлифовальной машинки не обойтись. 

Как отциклевать паркет своими руками? Перед началом работ покрытие следуеттщательно пропылесосить и протереть влажной тряпкой. Далее нужно определиться с инструментом: это может быть большая профессиональная машина, или небольшая ручная цикля.

Ручная циклевка

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

Совет:  оптимальная ширина ручной цикли 5 см, если она будет уже – придется при шлифовке делать больше движений, что потребует больших затрат сил.  Ручная цикля для шлифовки паркета

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

На заметку:  снятие верхнего слоя при помощи ручной цикли – дешевое, но длительное занятие. Весь процесс реконструкции паркета может занять несколько дней.  Использование ручной цикли (шлифовка)

После ручной циклевки следует шлифовка наждачной бумагой. Это позволит убрать оставшиеся неровности и сгладить поверхность после грубой циклевки.

Ручная шлифовка покрытия

Этапы реконструкции паркета машинным способом

Перед тем, как приступить к машинной циклевке поверхности, необходимо проверить, выдержит ли электросеть такую нагрузку (необходимое напряжение 220 Вт и сила тока 16 А). Если нет, то машинку подключают непосредственно к распределительному щитку.

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

Подготовка основания

Автоматическая циклевка паркета выполняется в несколько этапов. Для этого используется наждачная бумага разной зернистости (от 40 до 120 Р) – все зависит от состояния пола, степени его износа или повреждения. Для облегчения шлифования паркетный пол нужно предварительно слегка увлажнить из пульверизатора.

Как правильно циклевать паркет? Сначала выполняется грубая машинная циклевка с использованием крупного абразива (зернистость Р 24-40). С его помощью удаляется старое покрытие (лак, краска, мастики и масла, различные пропитки, воск), а также выравниваются все неровности и перепады на поверхности пола.

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

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

Поэтапное циклевание пола

Далее выполняется поверхностная шлифовка пола. Как шлифовать паркет? При помощи шкурки средней зернистости (абразив Р 60-80) удаляются возможные царапины, которые образовались после грубой циклевки и остатки старого покрытия.

Совет:  при каждом последующем проходе шлифовальной машины следите за тем, чтобы смещение не превышало 80% ширины барабана. 

Следующий этап – шпаклевка. При помощи специальной мастики заполняются все щели и зазоры.

Шпаклевка пола

Далее производиться финишная шлифовка мелкозернистой шкуркой (абразив Р 100-120). С ее помощью удаляются следы от шпаклевки и поверхность пола доводиться до гладкого состояния. На обработанную поверхность древесины рекомендуется нанести антисептик.

Важно:  все опилки и пыль после шлифовки аккуратно убирают пылесосом.  

Чем покрыть паркет после циклевки? Чаще всего используется глянцевый или матовый лак, также можно применять тонировочные средства, защитные масла, пропитки. Первый слой лака – грунтовочный. После его высыхания поднявшийся ворс удаляют при помощи поверхностной машинной шлифовки, или специальной сеткой для ручной шлифовки. Далее наносятся остальные слои лака.

Только после полной кристаллизации лака (через 7-10 суток) можно приступать к влажной уборке пола и расстановке мебелиВажно:  лак должен высохнуть естественным путем. Чтобы он лучше наносился, можно использовать валик из овечьей шерсти. 

Более наглядно продемонстрирует, как провести ремонт и шлифовку паркета своими руками, видео:

Чтобы получить обновленный пол, следует отремонтировать и отциклевать паркет. А чтобы он оставался таким и прослужил вам еще долго, его следует поддавать шлифовке вышеописанным способом каждые 6-7 лет.

Итог

Любое покрытие, даже защищенное несколькими слоями лака, требует ухода. Ведь со временем оно изнашивается: под воздействием УФ-лучей древесина выцветает, трескается, становится некрасивой и уязвимой к воздействию влаги и насекомых. Это может стать причиной полного разрушения настила. Но восстановить его изначальный вид можно при помощи шлифовки и циклевки паркета своими руками, а шпаклевка щелей и финишное покрытие лаком вернут настилу былую красоту и надежность.

Технология циклевки паркета своими руками

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

Однако, при желании последнее можно взять в аренду в какой-нибудь строительной компании и попробовать обновить полы самостоятельно. Далее и разберемся с тем, как делается шлифовка и циклевка паркета своими руками.

Для чего нужны циклевка и шлифовка

Деревянное покрытие пола, испытывая постоянные нагрузки, постепенно теряет первоначальный привлекательный внешний вид. Конечно, в этом случае требуется ремонт паркета. Циклевка и последующая шлифовка позволяют выровнять поверхность и вернуть ей былой лоск.

Со временем на паркете появляются сколы и царапины

Для чего нужна циклевка

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

Циклевка делается для того, чтобы удалить с поверхности дерева грязь и убрать разного рода повреждения

[su_label type=»success»]На заметку:[/su_label] [su_highlight background=»#E0FEC7″]В советские времена плашки выпускались очень толстыми, а поэтому циклевание паркета (штучного и щитового) часто выполняли вручную, просто снимая верхний слой стружки острым скребком. С современным тонким паркетом подобную процедуру профессионалы советуют проводить только в самом крайнем случае.[/su_highlight]

Зачем проводят шлифовку

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

Шлифовка необходима для того, чтобы сделать пол максимально гладким

Обработка паркета своими руками

Далее рассмотрим, как именно выполняются шлифовка и циклевка.

Как циклевать паркет своими руками машинкой

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

  1. Шлифовальную машинку барабанного типа. Ее и другое оборудование можно арендовать в какой-нибудь компании, занимающейся укладкой и ремонтом деревянных полов. Аренда барабанной машинки стоит примерно 1000р в сутки (на 2014г).
  2. Углошлифовальную машинку для зачистки труднодоступных мест (примерно 800р в сутки).
Обычно циклевку делают с помощью шлифмашинки барабанного типа

Также понадобятся расходные материалы:

  1. Грубая наждачка (Р36-Р40).
  2. Паркетная шпаклевка.

[su_label type=»info»]Совет:[/su_label] [su_highlight background=»#D9F0F9″]Шлифовальная машинка издает очень громкий «визжащий» звук. Поэтому циклевать пол стоит только днем, когда соседи на работе.[/su_highlight]

Отциклевать паркет можно следующим образом:

  1. Первый этап – вынос мебели, ковров и других предметов обстановки.
  2. Далее осматривают паркет на предмет вышедших из него наружу шляпок крепежных гвоздей. При необходимости утапливают их обратно.
Если при монтаже паркета использовались гвозди, перед циклевкой их нужно утопить в древесину
  1. На барабан надевают наждачку.
  2. Заводят машинку таким образом, чтобы барабан находился над поверхностью паркета.
  3. Дожидаются, когда барабан наберет полные обороты, и аккуратно опускают его.
  4. Проходят всю поверхность пола, стараясь двигать циклей равномерно. Если продержать ее на одном месте слишком долго, можно выбить ямку.
Циклевка пола. Фото процесса

[su_label type=»important»]Важно:[/su_label] [su_highlight background=»#F7D1CD»]Нельзя также долго двигать машинкой в направлении поперек волокон. Это может привести к скалыванию и выщерблению плашек.[/su_highlight]

Как правильно циклевать паркет с разным рисунком? Машинку нужно двигать:

  1. Под углом в 45гр к плашкам в том случае, если паркет уложен «елочкой».
  2. Сначала поперек комнаты, затем вдоль нее (по два раза) для фигурного паркета.

[su_label type=»warning»]Важно:[/su_label] [su_highlight background=»#FFEED5″]Художественный паркет выполняется из мелкослойной древесины. Поэтому циклевать и шлифовать его обычной шлифовальной машинкой нельзя. Обрабатывают его маленькой углошлифовальной ручной небольшими участочками с учетом рисунка. [/su_highlight]

  1. Проходят углошлифовальной машинкой все труднодоступные места.
Для шлифовки плашек в труднодоступных местах используют специальное оборудование

Шпаклевку для заделки оставшихся после циклевки трещин и сколов делают путем перемешивания клея ПВХ с древесной пылью (1*3). Заделке подлежат только трещины шириной не более 0.5см.

Надеемся, теперь вам понятно, как выполняется циклевка паркета. Видео ниже демонстрирует этот процесс во всех подробностях.

[su_youtube url=»http://www.youtube.com/watch?v=slgZVYTiozM»]

Как правильно отциклевать пол ручной циклей

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

Для ручной циклевки деревянной поверхности используется цикля скребок

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

[su_label type=»important»]Важно:[/su_label] [su_highlight background=»#F7D1CD»]Ведут инструмент обычно вдоль волокон. В труднодоступных местах можно делать это и поперек, следя при этом за тем, чтобы древесина не задиралась.[/su_highlight]

Ручная циклевка – процесс трудоемкий и длительный по времени

В процессе работы периодически собирают стружку, чтобы она не мешала. После того, как пол будет отциклеван полностью, его нужно просушить и пройти еще раз («по сухому») остро отточенной циклей. Итак, вы теперь знаете, как отциклевать паркет своими руками. Далее разберемся с тем, как правильно его отшлифовать.

Шлифовка паркета

После выравнивания поверхности пола и удаления слоя лака приступают к чистовой шлифовке. Для выполнения этой процедуры понадобятся:

  1. Плоскошлифовальная машинка (аренда – 1000р в сутки).
  2. Углошлифовальная машинка для обработки труднодоступных мест.
  3. Промышленный пылесос для удаления пыли перед лакированием — (аренда – около 800р в сутки).
Шлифовка выполняется с использованием плоскошлифовальной машинки

Из материалов нужно будет подготовить:

  1. Наждачку Р60-Р80 для чистовой шлифовки.
  2. Наждачку Р100-Р120 для снятия древесного ворса после лакирования.
  3. Три диска для углошлифовальной машинки (на 20м2).
  4. Лак для паркета (5кг на 20м2).
Шлифовка углошлифовальной машинкой выполняется при помощи дисков

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

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

Шлифовка позволяет добиться максимальной ровности и гладкости паркета

Что делать дальше?

Хозяев квартир наверняка интересует и то, чем покрыть паркет после циклевки и шлифовки. Для обработки могут быть использованы, к примеру, масло, мастика, морилка или воск. Однако чаще всего паркет покрывают все же лаком.

[su_label type=»success»]Совет:[/su_label] [su_highlight background=»#E0FEC7″]Покупайте лак для паркета только в магазинах с хорошей репутацией. Недобросовестные продавцы часто реализуют перемерзший при перевозке и хранении. Такой лак через пару недель пойдет пузырями.[/su_highlight]

Самостоятельная шлифовка паркета своими руками (видео):

[su_youtube url=»http://www.youtube.com/watch?v=O3LXStYyeHM»]

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

Как циклевать паркет самостоятельно: советы

На поверхности паркетного пола образовались трещины или щели, а древесина деформировалась? Хотите вернуть паркетному напольному покрытию прежний роскошный вид? Самый оперативный вариант – шлифовка паркета, когда верхний “изношенный” слой покрытия снимается специальным устройством или вручную. В чем особенности каждого из этих методов?

Реконструкция паркета шлифовальной машиной

Для шлифовки могут использоваться барабанные, ленточные и дисковые машины. Процесс включает в себя следующие этапы:

  • подготовка покрытия. Нужно поменять выпавшие планки на новые, убрать гвозди, очистить пол;
  • грубая шлифовка. Делается с помощью крупного абразива. Сначала производится шлифование основной площади, потом – углов. Также на этапе грубой шлифовки удаляется слой лака, воск, краска и др., поверхность выравнивается;
  • поверхностная шлифовка. Используется абразив средней зернистости. Помогает убрать остатки прежнего покрытия, а также царапины после грубой шлифовки;
  • шпаклевка. Щели и зазоры заполняются паркетной шпаклевкой;
  • финишная шлифовка. Выполняется мелкозернистым абразивом. Поверхность делается гладкой, убираются последние следы шпаклевки.

Финальный этап — нанесение защитного покрытия – лака или масла.

Шлифовка (циклевка) паркета своими руками

В этом случае для работы используется цикля – ручной инструмент в виде тонкой стальной пластины с заточенной кромкой. Способ весьма трудоемкий и поэтому устаревший. Чтобы выполнить циклевку:

  • снимите плинтус и смочите пол теплой водой;
  • удалите верхний слой с поверхности. Двигайтесь от центра к стенам. В процессе необходимо останавливаться, чтобы заточить инструмент;
  • зашпаклюйте трещины и другие дефекты поверхности;
  • отшлифуйте покрытие. В этом поможет “наждачка” с основой на ткани, для удобства ее можно прикрепить к деревянному бруску. Шлифовку лучше повторить несколько раз;
  • уберите оставшийся мусор. Оптимально сделать влажную уборку 2-3 раза;
  • покройте паркет лаком или маслом. Контролируйте количество покрытия, т.к. если его будет слишком много, при следующей циклевке паркета с покрытием лака придется удалять с поверхности толстый слой.

Самостоятельное шлифование: советы

Если вы решили действовать самостоятельно, учитывайте некоторые рекомендации:

  1. Шлифовать нужно не отдельные участки, а покрытие в целом, чтобы обработанные участки не отличались.
  2. Если между паркетными досками образовались большие щели, шлифование не поможет – их лучше заменить.
  3. Количество возможных шлифовок зависит от толщины полезного (рабочего) слоя паркетной доски: например, при толщине верхнего слоя 4 мм шлифовку современной дисковой машиной можно произвести 2-3 раза.

В магазине “Вудлайн ПаркетМ” вы можете купить паркетную доску в Минске, а также паркетный лак и другие сопутствующие товары для ухода за вашим напольным покрытием!

циклов — повторение / зацикливание паркетных файлов Spark в сценарии приводит к ошибке / накоплению памяти (с использованием запросов Spark SQL)

Я пытался понять, как предотвратить сбой Spark из-за проблем с памятью, когда я перебираю паркетные файлы и несколько функций постобработки. Извините за поток текста, но это не совсем одна конкретная ошибка (я использую PySpark). Приносим извинения, если это нарушает правильную форму переполнения стека!

Базовый псевдокод:

  #fileNums - разделы имени файла в паркетном файле. 
# Я читаю каждый из них как отдельный файл из его подкаталога "="
для счетчика в fileNums:
  sparkDataFrame = sqlContext.читать. паркет (прилавок)
  summaryReportOne = sqlContext.sql. ("ВЫБРАТЬ .....")
  summaryReportOne.write.partition ("id"). parquet ("/")
  summaryReportTwo = sqlContext.sql. ("ВЫБРАТЬ ....")
  summaryReportTwo.write.partition ("id"). parquet ("/")
  # еще несколько запросов, несколько из которых связаны с объединениями и т. д.
  

В этом коде используются искровые SQL-запросы, поэтому мне не удалось создать функцию-оболочку со всеми SQL-запросами / функциями и передать ее в foreach (который не может принимать sparkContext или sqlQuery в качестве входных данных) в отличие от стандартного для цикла.

Технически, это один большой паркетный файл с разделами, но он слишком велик, чтобы читать все сразу и запрашивать по нему; Мне нужно запустить функции на каждом разделе. Поэтому я просто запускаю обычный цикл python в PySpark, где в каждом цикле я обрабатываю один паркетный раздел (подкаталог) и пишу соответствующие выходные отчеты.

Не уверены, сработает ли обертывание всего кода вокруг большого mapPartition () из-за размера всего файла паркета?

Но после нескольких циклов сценарий аварийно завершает работу из-за ошибок памяти, в частности из-за ошибки кучи Java.(Я подтвердил, что нет ничего особенного в файле, для которого происходит сбой цикла; это происходит с любым случайным файлом, считываемым во втором или третьем цикле.)

  Вызвано: com.google.protobuf.ServiceException:
java.lang.OutOfMemoryError: пространство кучи Java
в org.apache.hadoop.ipc.ProtobufRpcEngine $ Invoker.invoke (ProtobufRpcEngine.java:244)
в com.sun.proxy. $ Proxy9.delete (Неизвестный источник)
в org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB.delete (ClientNamenodeProtocolTranslatorPB.java: 526)
... еще 42
Вызвано: java.lang.OutOfMemoryError: пространство кучи Java
  

Я понимаю, что Spark не предназначен для выполнения в цикле, но эти SQL-запросы слишком сложны для стандартных упакованных функций Spark SQL, и мы составляем несколько сводных отчетов для каждого файла по разной статистике агрегирования.

Есть ли способ в основном очистить память в конце каждого индекса цикла? Удаление всех зарегистрированных временных таблиц с помощью sqlContext.dropTempTable () и очистка кеша с помощью sqlContext.clearCache () не помог. Если я попытаюсь остановить sparkContext и перезапустить его в каждом цикле, я также получу ошибки, так как некоторые процессы еще не завершены (похоже, что раньше вы могли «изящно» останавливать контекст, но я не смог найти это в текущей документации PySpark.)

Я также должен отметить, что я не вызываю unpersist () для фреймов данных в цикле после того, как я закончил с ними, но я также не вызываю для них persist (); Я просто переписываю фреймы данных в каждом цикле (что может быть частью проблемы).

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

Были бы полезны любые предложения, включая инструменты, которые могут быть лучше для этого варианта использования, чем Spark. Я использую Spark версии 1.6.1.

Направление деревянного пола | Укладка паркетных полов

Пришло время сменить пол и поставить новую красивую древесину.Но прежде чем выбирать древесину, заказывать ее и составлять график укладки, нужно определиться с одной важной вещью — в каком направлении следует укладывать твердую древесину? То, что сначала могло показаться легким решением, теперь может показаться ошеломляющим, поскольку вы будете жить с этим долгое время. Не волнуйтесь, направление, которое вы выберете, зависит от различных факторов, которые мы для вас разберем.

Начнем с типов направлений.

Направление укладки деревянных полов

Прямое / вертикальное направление деревянного пола

City Lights Oak Hardwood на Таймс-сквер, доступен по адресу Avalon Flooring

. Наиболее распространенный рисунок пола — прямой, также называемый вертикальным.Чтобы добиться этого рисунка, паркетные доски укладывают параллельно друг другу по длине или ширине вашей комнаты. Этот классический узор используется для создания простых и даже современных дизайнов, подчеркивающих оригинальный вид деревянного пола. Поскольку это самый простой (да, каламбур) установить, он также и наименее затратный. Установка других рисунков может занять больше времени и потребовать дополнительной древесины, что делает их немного более дорогостоящими.

Горизонтальное направление деревянного пола

Твердая древесина акации в Вудбридже, доступная в Avalon Flooring

Это еще один распространенный рисунок пола.Если ваша комната уже, чем длинна, она может казаться закрытой. Укладка паркетного пола горизонтально — хороший способ решить эту проблему. Это привлекает взгляд из стороны в сторону, а не вниз по комнате. Точно так же, как рубашка с горизонтальными полосками может заставить людей выглядеть шире, чем они есть на самом деле, горизонтальные полосы, создаваемые досками пола в комнате, могут делать то же самое.

Деревянный пол в елочку Направление

Фото любезно предоставлено Armstrong Flooring

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

Диагональный пол из твердых пород дерева

Европейский дуб Торнбери из твердых пород древесины в Алвестоне, доступен по адресу: Avalon Flooring

. Это направление добавит элегантности вашему пространству, не отклоняясь слишком далеко от традиционного прямого направления. Паркетные доски укладываются параллельно друг другу, но под углом 45 градусов к стенам.

Случайное направление деревянного пола

Barbados Shirango Mesquite Hardwood in Igneous, доступный в Avalon Flooring

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

Паркет, паркет, направление

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

Укладка паркетных полов: на что обратить внимание

А теперь давайте поговорим о том, что нужно учитывать в вашем пространстве, чтобы помочь вам двигаться в правильном направлении (опять же каламбур).

Координаторы помещения

Acacia Hardwood в цвете Feather Grey, продается по адресу Avalon Flooring

. Чтобы добиться наиболее приятного или впечатляющего эффекта, ваши доски должны быть уложены в направлении, ведущем к определенному фокусу комнаты — например, к вашему прекрасному камину или другим крупным архитектурным деталям. .

Источники света

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

Балки перекрытия

Еще один момент, который следует учитывать, — это балки перекрытия.Балки перекрытия используются для поддержки пола на открытом пространстве, таком как подвал, пространство для лазания и т. Д. Это похоже на мини-мост, который поддерживается только на каждом конце. Когда много балок устанавливают рядом друг с другом и сверху прибивают черновой пол, например фанеру, они создают большую площадь пола, называемую «системой пола».

Несколько комнат

Новая возможность Red Oak Hardwood в Gunstock, доступная в Avalon Flooring

. Если вы кладете лиственную древесину более чем в одной комнате, это потребует некоторого предварительного планирования, которое следует спланировать перед заказом и планированием установки. Может показаться, что открытое пространство плавно перетекает в одно большое пространство, если деревянный пол укладывается от длинного конца помещения к другому. Комнаты необычной формы или комнаты, которые выходят в узкие коридоры, могут не поддаваться полам, уложенным вдоль одной непрерывной линии обзора; можно установить тонкую деревянную планку, чтобы обозначить порог, по которому пол меняет направление. Чтобы избежать переходов или создать эффектное визуальное впечатление, попробуйте укладывать деревянные полы по диагонали или в елочку по всему дому.

Прицел

Прокладка деревянных досок от главного входа к противоположной стене поможет упростить обзор и сделает комнату менее загруженной.

Коридоры

Фото любезно предоставлено Laura Bern Interiors

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

Неровные стены

Еще одна важная вещь, которую следует учитывать при укладке паркетных полов, — это возможность того, что ваши стены не прямые.

Конструктивные особенности

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

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


В компании Avalon Flooring мы хотим, чтобы вы были довольны от первого шага в нашем выставочном зале до первого шага в новом напольном покрытии — и, как ваш партнер в домашнем дизайне, мы будем рядом с вами на каждом этапе этого пути. .Считайте нас своим местом «универсального покупателя» для всего, что связано с напольными покрытиями… (и обработкой окон)!

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

Если у вас есть вопросы, напишите нам.


Итерация по большим данным, создание уникальных фреймов данных на основе сортировки по одному столбцу — Python

* Здравствуйте, это мой первый пост здесь, и он основан на проблеме, которую я создал и пытался решить на работе. Я постараюсь точно описать свою проблему, так как у меня возникают проблемы с размышлениями о предпочтительном решении. №3 для меня настоящий пьяный.

  1. Возьмите большой файл данных о паркете - нет проблем

2. Выберите 5 столбцов из паркета и создайте фрейм данных - без проблем.
  

импорт панд
df = pd.read_parquet (’/ Users / marmicha / Downloads / sample.parquet’,

  columns = ["ts", "session_id", "event", "duration", "tags__artifact"])

3. Но вот здесь для меня это становится немного сложнее.  Один столбец (ключевой) называется session_id. Многие ценности уникальны. Существует много повторяющихся значений (из session_id), и с ними связано несколько строк данных. Я хочу пройти через основной фрейм данных, создать уникальный фрейм данных для каждого session_id. Для каждого из этих уникальных (под) фреймов данных будет выполнено вычисление, которое просто получит СУММУ столбца «длительность» для каждого session_id.Опять же, эта SUM будет уникальной для каждого уникального session_id, поэтому каждый субфрейм данных будет иметь свою собственную SUM с добавленной строкой с указанным общим количеством вместе с session_id Я думаю, что есть формула вложенного цикла, которая будет работать для меня, но все усилия был беспорядок на сегодняшний день.

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

5. Наконец, запишите этот окончательный df в новый файл паркета. Должно быть достаточно просто, чтобы мне не понадобилась помощь.
  

Но это вкратце моя проблема. Основной дизайн, с которым мне понадобится помощь, — №3. Я играл с interuples и iterows

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

Спасибо
Марк

форматов данных для обучения в TensorFlow: Parquet, Petastorm, Feather и др. | by Chaim Rand

Упростите управление данными за счет унификации формата файлов для различных рабочих нагрузок машинного обучения

Фотография Максима Шутова на Unsplash

Машинное обучение — это все о данных.Для успешного обучения сложной модели вам понадобится высококачественный обучающий набор данных ; набор данных, который достаточно велик, точно помечен и правильно представляет распределение выборок данных в реальном мире. Однако не менее важно правильное управление данными. Под управление данными мы имеем в виду, как и где хранятся данные, способы доступа к ним и преобразования, которым они подвергаются в течение жизненного цикла разработки. Основное внимание в этой публикации уделяется файловому формату , используемому для хранения данных обучения, и его последствиям для обучения модели.Выбор формата файла — одно из многих важных решений, которые вам необходимо принять при определении проекта машинного обучения.

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

Прежде чем мы начнем, давайте подготовим почву. В этом посте мы предполагаем, что размер нашего обучающего набора данных требует его хранения в распределенной системе хранения, например сотни терабайт. В приведенных ниже примерах мы будем использовать Amazon S3 для хранения данных, но принципы в равной степени применимы к любой другой распределенной системе хранения. Данные, вероятно, будут доступны нескольким потребителям в течение цикла разработки и для различных целей, включая создание данных, анализ данных, обучение модели и многое другое.Наше внимание будет сосредоточено на обучении в TensorFlow, хотя многое из того, что мы скажем, относится и к другим структурам обучения.

В основе этого поста лежит предположение о том, что требуется формат файла для наших данных, то есть нам нужен один или несколько файлов для: 1. группировки всех элементов / столбцов / функций отдельных выборок данных, а также 2. группировки вместе несколько выборок данных. Конечно, можно представить себе сценарии, в которых можно выбрать сохранение всех элементов всех образцов в отдельных файлах и в их необработанном формате. Однако во многих случаях, особенно если размеры файлов небольшие (например, несколько КБ), эта стратегия может серьезно ухудшить производительность доступа к данным во время выполнения.

Цель этой публикации — выделить некоторые важные соображения при выборе формата файла и обсудить несколько различных вариантов, доступных сегодня. Мы упомянем ряд форматов, а также ряд фреймворков и инструментов для разработки программного обеспечения. Эти упоминания , а не следует интерпретировать как одобрение.Подходящий для вас выбор, вероятно, будет основан на широком спектре соображений, некоторые из которых могут выходить за рамки данного обсуждения. Сообщение будет включать несколько простых фрагментов кода. Они представлены только в целях демонстрации и не должны рассматриваться как оптимальные реализации.

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

Пожалуйста, не стесняйтесь обращаться ко мне с любыми комментариями или исправлениями.

Чтобы облегчить это обсуждение, давайте взглянем на общий формат файла, используемый для обучения в TensorFlow, формат TFRecord .

TFRecord Format

TFRecord — это формат, основанный на буферах протокола, специально разработанный для использования с TensorFlow.Файл TFRecord состоит из последовательностей сериализованных двоичных образцов. Каждый образец представляет собой tf.train.Example, который, в свою очередь, представляет словарь сопоставлений строки и значения. Последовательный характер формата TFRecord обеспечивает высокую пропускную способность потоковой передачи данных. В частности, не нужно скачивать и открывать полный файл, чтобы начать просмотр его содержимого. Кроме того, модуль tf.data TensorFlow включает высокооптимизированный класс TFRecordDataset для создания конвейеров ввода на основе данных, хранящихся в файлах TFRecord .Однако формат TFRecord не лишен недостатков. Здесь мы назовем несколько:

Одноцелевое : формат TFRecord вряд ли удовлетворит потребности любого другого потребителя данных в конвейере разработки. Команды разработчиков обычно поддерживают свои данные в другом формате и создают производные данных в формате TFRecord специально для целей обучения. Хранение нескольких копий ваших данных не идеально, особенно если ваш набор данных велик.Помимо дополнительных затрат на хранение данных, подразумевается, что каждый раз, когда происходит изменение в основном наборе данных, необходимо создавать новую копию TFRecord . Мы можем пожелать обновить записи основных данных на основе результатов сеанса обучения, и в этом случае нам также потребуется поддерживать сопоставление между сгенерированными записями TFRecord и их соответствующими записями в формате основных данных.

Извлечение данных частичной записи : Другая проблема с форматом TFRecord возникает, когда наша обучающая модель требует только подмножества элементов TFRecord .Например, предположим, что у нас есть многоголовая модель, которая выполняет различные типы сегментации на уровне пикселей на входном изображении. Каждая запись в наборе данных содержит несколько достоверных изображений, соответствующих нескольким головам модели. Теперь мы решили обучить версию модели с одной головой. Тривиальным решением было бы ввести полный TFRecord и просто игнорировать ненужные поля. Однако необходимость извлекать и анализировать посторонние данные может серьезно повлиять на пропускную способность нашего входного конвейера и, следовательно, на скорость нашего обучения.Чтобы снизить риск возникновения узких мест в конвейере, нам нужно будет создать дополнительную копию данных, содержащую только контент, имеющий отношение к конкретному обучению. Это еще больше обостряет проблему дублирования данных, о которой мы говорили выше.

Фильтрация записей : Иногда нас интересует обход записей, которые имеют определенные значения записей. Тривиальный способ сделать это — перебрать все данные и просто удалить любую запись, которая не соответствует нашему фильтру (например,г. используя tf.filter). Как и раньше, это может привести к значительным накладным расходам на конвейер ввода данных и привести к значительному прекращению цикла обучения. В предыдущих постах (здесь и здесь) мы продемонстрировали необходимость фильтрации входных изображений в зависимости от того, содержат ли они розовые автомобили. Решение, которое мы предложили, заключалось в том, чтобы хранить разные классы данных в отдельных файлах. Когда возникала необходимость в фильтрации, мы могли просматривать только файлы, связанные с фильтром. Однако это решение требует, чтобы мы могли предвидеть фильтры, которые нам нужно будет применить, что не всегда возможно.Если мы столкнемся с необходимостью применить фильтр, которого мы не ожидали, мы можем либо воссоздать данные с дополнительным разделом, либо вернуться к тривиальному методу удаления несовпадающих выборок. Ни один из вариантов не является оптимальным.

Преобразование данных : Типичный конвейер входных данных может включать в себя несколько операций с входными данными, включая деформацию данных, дополнения, пакетирование и многое другое. TensorFlow предлагает набор встроенных операций обработки данных, которые можно добавить в граф вычислений конвейера входных данных через tf.data.Dataset.map функция. Однако вы можете обнаружить, что требуемая обработка данных не может быть эффективно реализована с помощью TensorFlow. Один из вариантов — применить блок собственного кода Python с помощью tf.py_function, но это может ограничить производительность пропускной способности данных из-за глобальной блокировки интерпретатора Python (GIL). Во многих случаях использования требуется использовать формат, который позволяет применять операции в собственном Python до их ввода в граф вычислений TensorFlow.

Требования к формату

На основе обсуждения выше давайте составим список некоторых свойств, которые мы ищем в нашем формате файла. Учитывая добавленную стоимость и сложность хранения нескольких копий наших данных, с этого момента мы ограничимся одной копией данных, т.е. мы должны выбрать формат, который удовлетворяет потребности всех потребителей данных. Этот список не является исчерпывающим. Следует учитывать дополнительные требования, основанные на конкретном варианте использования.

  • Распределенное хранилище : формат файла и поддерживающие библиотеки должны поддерживать возможность хранения больших наборов данных в настройках распределенного хранилища, таких как Amazon S3, HDFS и т. Д.
  • Программная экосистема : Нам нужна сильная экосистема библиотек, предоставляющая набор инструментов для анализа и обработки данных.
  • Поддержка столбцов : Формат файла и вспомогательные библиотеки должны поддерживать эффективное извлечение подмножества функций для каждой выборки данных.
  • Фильтрация строк : Формат файла и вспомогательные библиотеки должны поддерживать эффективную фильтрацию значений примеров функций.
  • Интеграция с TensorFlow : формат должен обеспечивать эффективную потоковую передачу данных из хранилища в учебные сессии TensorFlow.

Одно требование для обучения, которое мы не обсуждали, — это перетасовка данных . Обычной практикой является перемешивание обучающих данных перед каждым обходом (эпохой). Если бы мы могли получить произвольный доступ к любой выборке в наборе данных, перетасовка данных была бы легкой. Однако такой произвольный доступ к отдельным образцам происходит за счет производительности, особенно в условиях распределенного хранилища. Вместо этого необходимо прибегать к другим механизмам для перемешивания, включая комбинации: перемешивания выборок во время создания данных, перемешивания списка файлов, составляющих полный набор данных, перемежения между несколькими наборами данных и использования соответствующего большого буфера перемешивания во время обучения (например,г. см. tf.data.Dataset.shuffle). Мы решили не указывать перетасовку как требование к формату файла, поскольку, на наш взгляд, в представленном нами сценарии обучения эта проблема будет существовать при любом выборе формата файла.

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

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

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

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

TFRecord оценка

Apache Parquet

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

Одним из основных атрибутов формата Parquet , которому он во многом обязан своим успехом, является то, что это столбчатый формат хранения. В отличие от других форматов, таких как CSV или TFRecord , в которых каждая строка данных сохраняется последовательно, в столбцовом формате данных столбцы данных хранятся вместе. Каждый файл в наборе данных разделен на блоки строк, каждый из которых содержит несколько выборок. В блоке строки данные образца хранятся в соответствии со столбцами, т.е.е. значения первого поля всех образцов появляются первыми, за ними следуют значения второго поля всех образцов и так далее. Столбчатый характер формата способствует эффективному анализу данных, поскольку запросы могут выполняться по подмножествам столбцов без необходимости загружать все записи данных. Кроме того, группирование столбцов может привести к более эффективному сжатию данных и, следовательно, к снижению затрат на хранение. Прочтите этот пост, чтобы узнать больше о преимуществах столбчатого хранения данных.

Следующая диаграмма суммирует нашу оценку формата Parquet:

Parquet оценка

Будучи столбцовым форматом, Parquet позволяет эффективно извлекать подмножества столбцов данных. Кроме того, мы также можем воспользоваться преимуществом столбчатого характера формата для облегчения фильтрации строк: 1. сначала извлекая столбец, по которому мы фильтруем, а затем 2. извлекаем остальные столбцы только для строк, которые соответствуют фильтру. Однако, поскольку эффективное извлечение данных может зависеть от извлечения столбчатых данных из полных блоков строк, неясно, будет ли этот метод работать хорошо.Поэтому мы отметили эту возможность желтым цветом. Более эффективный подход к фильтрации может потребовать разделения выборок на разные файлы Parquet в соответствии с классом во время создания набора данных, как описано выше. В pyspark это можно сделать с помощью функции partitionBy.

Создание набора данных Parquet : В блоке кода ниже мы демонстрируем создание набора данных Parquet из популярного набора данных Cifar10 с использованием библиотеки pyspark. Parquet Создание поддерживается дополнительными библиотеками, включая pandas и pyarrow.

 из tensorflow.keras импортировать наборы данных 
из pyspark.sql import SparkSession, Row
from pyspark.sql.types import StructType, \
StructField, IntegerType, BinaryTypedef cifar_to_parquetField ():
, BinaryType (), True),
StructField ("label", IntegerType (), True)])
(данные, метки), _ = datasets.cifar10.load_data ()
labels = labels.flatten (). Tolist ( )
num_procs = 4 # установить количество параллельных процессов
spark = SparkSession.builder \
.master ('local [{num_procs}]'. format (num_procs = num_procs)) \
.getOrCreate ()
sc = spark.sparkContext num_samples = len (label)
output_url = 'file: /// tmp / parquet 'def row_generator (i):
return {
' image ': bytearray (data [i] .tobytes ()),
' label ': labels [i],
} # необязательно настраивать размер блоков строк
# blockSize = 1024 * 1024 * 16 # 16 МБ
# sc._jsc.hadoopConfiguration () \
# .setInt ("parquet.block.size", blockSize)
rows_rdd = sc.parallelize (range (num_samples)) \
.map (row_generator) \
.map (lambda x: Row (** x)) spark.createDataFrame (rows_rdd, schema) \
.write.mode ('overwrite') \
.parquet (output_url)

Хотя количество файлов, составляющих набор данных, размеры каждого файла и размер каждого блока строк могут существенно повлиять на производительность загрузки данных, управление этими параметрами иногда может быть незначительным. сложный. В pyspark размер блока строки можно установить с помощью sc._jsc.hadoopConfiguration , как в комментарии в блоке кода выше (значение по умолчанию — 128 МБ), а также размеры и количество файлов по количеству параллельных процессов и с помощью функции объединения.

С помощью соответствующей настройки сценарий можно изменить для записи непосредственно в Amazon S3 (см., Например, здесь и здесь).

Petastorm

Библиотека petastorm была создана с конкретной целью унификации набора данных, используемого всеми потребителями данных в конвейере разработки (см. Здесь).Хотя petastorm абстрагирует базовый формат хранения, по умолчанию используется формат Apache Parquet . Точнее, petastorm расширяет Apache Parquet , предоставляя дополнительную информацию о схеме в структуре Unischema, поддерживая многомерные данные и поддерживая кодеки сжатия данных. В дальнейшем мы будем предполагать использование расширенного Parquet в качестве базового формата и злоупотреблять термином petastorm , используя его для обозначения как самой библиотеки, так и формата файла, созданного библиотекой.Чтобы различать их, мы будем использовать заглавные буквы при обращении к формату Petastorm . Использование Parquet в качестве основного формата означает, что Petastorm обладает всеми преимуществами, связанными с использованием столбчатого формата, который мы обсуждали выше. Однако использование расширений Parquet , представленных petastorm, действительно связано с предостережением: набор данных должен быть создан библиотекой petastorm, и всем потребителям данных в конвейере разработки потребуется библиотека petastorm для правильного чтения и анализа данных. .Это требование несколько ограничивает, поскольку одним из наиболее привлекательных атрибутов формата Parquet была его обширная программная экосистема для доступа к данным и управления ими. Именно по этой причине мы пометили Software Ecosystem желтым на диаграмме оценки ниже:

Petastorm оценка

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

Создание набора данных Petastorm : Создание набора данных в petastorm очень похоже на создание Parquet в pyspark.Основные различия заключаются в использовании Unischema и контекста materialize_dataset , который служит оболочкой для создания набора данных.

 из petastorm.codecs import CompressedImageCodec, \ 
NdarrayCodec, ScalarCodec
из petastorm.etl.dataset_metadata импортировать materialize_dataset
из petastorm.unischema import Unischema, \
Unischema_park_schemaField_schema, import IntegerTypedef cifar_to_peta ():
MySchema = Unischema ('MySchema', [
UnischemaField ('изображение', np.uint8,
(32,32,3), NdarrayCodec (), False),
UnischemaField ('label', np.uint8,
(), ScalarCodec (IntegerType ()), False),
])
(данные, label), _ = datasets.cifar10.load_data ()
labels = labels.flatten (). tolist ()
num_procs = 4 # установить количество параллельных процессов
spark = SparkSession.builder. \
master ('local [{num_procs}] '. format (num_procs = num_procs)) \
.getOrCreate ()
sc = spark.sparkContext num_samples = 100 #len (labels)
output_url =' file: /// tmp / petastorm '
rowgroup_size_mb = 128 def row_generator (i):
return {
'image': data [i],
'label': np.uint8 (labels [i]),
} # Обернуть часть материализации набора данных.
# Позаботится о настройке переменных окружения Spark как
# а также сохранит метаданные, специфичные для петасторма
с materialize_dataset (spark, output_url,
MySchema, rowgroup_size_mb):
rows_rdd = sc.parallelize (range (num_samples)) \
. карта (генератор_ строк) \
.map (лямбда x: dict_to_spark_row (MySchema, x)) spark.createDataFrame (rows_rdd,
MySchema.as_spark_schema ()) \
.write \
.mode ('overwrite') \
.parquet (output_url)

Размер блока строки определяется в петасторме параметром rowgroup_size_mb . В этом примере мы не использовали поддержку кодеков, включенную в petastorm. При использовании больших элементов данных использование поддержки кодека может привести к значительному сжатию данных и экономии затрат на хранение.

Feather

Формат файла Feather — это еще один столбчатый формат, который мы рассматриваем в связи с его включением в систему ввода-вывода TensorFlow (подробнее об этом ниже).Несмотря на то, что между Feather и Parquet есть много общего, существует также ряд тонких различий, связанных с их различными базовыми реализациями. Хорошее сравнение между ними, включая сценарии, в которых Feather может быть лучшим вариантом, можно найти здесь. Важно различать версию 1 и версию 2 формата Feather . Версия 2 поддерживает больше типов данных, а также различные типы сжатия данных.Всякий раз, когда вы сталкиваетесь с обзором Feather , имейте в виду, что он может быть основан на версии 1 формата.

Основное различие между Feather и Parquet заключается в масштабах экосистемы программного обеспечения. Хотя он поддерживается такими библиотеками, как pyarrow и pandas, на момент написания этой статьи формат Feather гораздо менее популярен, чем Parquet , а количество поддерживающих фреймворков гораздо более ограничено. Мы суммируем нашу оценку формата файла Feather на диаграмме ниже:

Оценка Feather

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

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

 из tensorflow.keras импортировать наборы данных 
импортировать pyarrow как pa
из pyarrow.feather import write_featherdef cifar_to_feather ():
(данные, метки), _ = datasets.cifar10.load_data ()
data = [data [i] .flatten () для i в диапазоне (data.shape [0])]
label = labels.flatten ()
table = pa.Table.from_arrays ([data, labels], ['data', 'labels'])
write_feather (таблица, '/tmp/df.feather', chunksize = 10000) write_feather (table, '/tmp/df.feather', chunksize = 10000)

В приведенном выше примере размер блока строки определяется параметром параметр chunksize .Обратите внимание, что, в отличие от предыдущих форматов, мы определяем размер по количеству записей в блоке, а не по объему памяти в блоке.

Теперь мы обратим наше внимание на последнее требование, которое мы перечислили выше, совместимость формата файла с обучением TensorFlow. Независимо от того, насколько привлекательным может быть ваш выбранный формат файла в противном случае, если вы не можете интегрировать его использование в свою тренировку или если скорость входного потока не соответствует вашим потребностям, тогда вы снова вернетесь к исходной точке.В этом разделе мы рассмотрим некоторые из имеющихся в нашем распоряжении инструментов для обучения работе с TensorFlow с форматами файлов, с которыми мы столкнулись выше. В следующем разделе мы измерим скорость входящего потока в ряде экспериментов. Наше обсуждение основано на версиях 2.4.1 TensorFlow, 0.17.1 TensorFlow I / O и 0.11.0 Petastorm.

TensorFlow Dataset API

В типичном приложении TensorFlow мы определяем tf.data.Dataset, который представляет последовательность выборок данных, и передаем их в цикл обучения.Настройка tf.data.Dataset включает определение источника данных и применение преобразований к данным. Источником могут быть данные, хранящиеся в памяти или в файлах. Подробнее о том, как создать набор данных в TensorFlow, читайте здесь. Поскольку мы выбрали формат TFRecord в качестве ориентира, давайте начнем с рассмотрения того, как мы загружаем файлы TFRecord в сеанс обучения TensorFlow.

TFRecordDataset: TFRecordDataset принимает на вход список из файлов TFRecord и создает последовательность сериализованных образцов данных TFRecord .Обычно за ним следует вызов tf.data.Dataset.map, в котором анализируется каждый отдельный образец. Блок кода ниже демонстрирует создание TFRecordDataset из данных Cifar10, хранящихся в формате TFRecord :

 import tensorflow as tf 
def get_dataset ():
autotune = tf.data.experimental.AUTOTUNE
def parse): (example_proto):
feature_description = {
'image': tf.io.FixedLenFeature ([], tf.string),
'label': tf.io.FixedLenFeature ([], tf.int64)}
features = tf.io.parse_single_example (example_proto,
feature_description)
image = tf.io.decode_raw (features ['image'], tf.uint8)
image = tf.reshape (image, [32, 32, 3])
return image, label

записи = tf.data.Dataset.list_files ( + '/ *')
ds = tf.data.TFRecordDataset (records,
num_parallel_reads = autotune)
ds = ds.map (parse, num_parallel_calls)
return ds

Наш опыт работы с TFRecordDataset в целом положительный; лежащая в основе механика извлечения и анализа файлов кажется довольно надежной, и мы редко оказываемся в узких местах на этой части конвейера.Мы также обнаружили, что API является надежным и хорошо работает в самых разных средах обучения.

TensorFlow имеет несколько других классов tf.data.Dataset для загрузки данных непосредственно из файлов, включая FixedLengthRecordDataset и TextLineDataset. Создание набора данных TensorFlow из формата файла, который не соответствует ни одному из существующих классов, требует немного больше творчества. Здесь мы упомянем три варианта в порядке возрастания сложности.

Создать набор данных из источника памяти : Первый вариант — загрузить и проанализировать файлы в Python (вне TensorFlow) и загрузить образцы данных в TensorFlow из источника памяти.Один из способов сделать это — использовать tf.data.Dataset.from_generator, как в блоке псевдокода ниже.

 import tensorflow as tf 
def get_custom_ds (file_names):
def my_generator ():
for f in file_names:
# download f
samples = ... # синтаксический анализ образцов из f
для образца в samples:
yield sample return tf.data.Dataset.from_generator (
my_generator,
output_types = [tf.uint8, tf.uint8],
output_shapes = [[32,32,3], []])

Разобрать файлы в TensorFlow : A Второй вариант — полагаться на tf от TensorFlow.io модуль для скачивания и разбора файлов. В отличие от предыдущего решения, здесь управление файлами является частью графа выполнения TensorFlow. Вот один из способов сделать это с помощью API-интерфейсов tf.data.Dataset.list_files и tf.data.Dataset.interleave:

 import tensorflow as tf 
def get_custom_ds ():
autotune = tf.data.experimental.AUTOTUNE
имен файлов = tf.data.Dataset.list_files ( + '/ *',
shuffle = True)
def make_ds (path):
bytestring = tf.io.read_file (path)
samples = ... # синтаксический анализ байтовой строки с использованием tf-функций
return tf.data.Dataset.from_tensor_slices (samples) ds = filenames.interleave (make_ds,
num_parallel_calls = autotune,
terministic = False)
return ds

Создайте собственный класс набора данных : последний вариант, который мы упомянули, — это создание нового класса tf.data.Dataset, специально разработанного для обработки вашего формата данных. Этот вариант требует высочайшего технического мастерства. Он также предлагает наивысшее потенциальное вознаграждение, измеряемое скоростью потока ввода данных.Один из способов реализовать это — изменить код TensorFlow C ++ и перестроить TensorFlow из исходного кода. Например, можно клонировать реализацию TFRecordDataset и перезаписывать только те части кода, которые имеют непосредственное отношение к синтаксическому анализу формата. Таким образом можно надеяться получить те же преимущества в производительности, что и TFRecordDataset. Недостатком этого подхода является то, что он потребует поддержки специализированной версии TensorFlow. В частности, каждый раз, когда вы обновляетесь до новой версии TensorFlow, вам нужно будет перестраивать собственное решение.Обратите внимание, что создание настраиваемого класса набора данных также может быть реализовано в TensorFlow I / O, а не в TensorFlow, как описано в этом сообщении.

Хотя любое из вышеперечисленных решений можно соответствующим образом настроить для увеличения производительности, это не всегда так просто. Что еще хуже, вы можете обнаружить, что идеальные конфигурации (например, количество подчиненных системных процессов) могут сильно различаться в зависимости от среды обучения. В этом смысле использование специального класса набора данных, такого как TFRecordDataset, имеет существенное преимущество перед описанными нами индивидуализированными решениями.Следующие два решения, которые мы увидим, будут использовать классы наборов данных, специально разработанные для выбранного нами формата файлов.

TensorFlow I / O

TensorFlow I / O (tfio) — это пакет расширения для TensorFlow, который добавляет поддержку ряда файловых систем и форматов файлов, не включенных в TensorFlow. В частности, tfio определяет класс tfio.arrow.ArrowFeatherDataset для создания наборов данных на основе формата Feather и функцию tfio.v0.IODataset.from_parquet для создания наборов данных на основе формата Parquet .

TensorFlow I / O Feather Dataset : Класс tfio.arrow.ArrowFeatherDataset — это лишь один из набора API-интерфейсов, предназначенных для поддержки формата Apache Arrow. Чтобы получить полный обзор предложения tfio Apache Arrow, обязательно посетите этот блог. В блоке кода ниже мы демонстрируем использование tfio.arrow.ArrowFeatherDataset на основе данных Cifar10, хранящихся в формате Feather , который мы создали выше.

 импортировать тензор потока как tf 
импортировать тензор потока_io.стрелка как arrow_iodef get_dataset ():
filenames = <список файлов перьев>
ds = arrow_io.ArrowFeatherDataset (filenames,
columns = (0, 1),
output_types = (tf.uint8, tf.uint8),
output_shapes = ([32 * 32 * 3,], []),
batch_mode = 'auto')
ds = ds.unbatch ()
return ds

Устанавливая для аргумента batch_mode значение ‘auto’ , мы выбираем чтобы набор данных возвращал блоки строк Parquet . Поэтому первый вызов, который мы применяем, — это разблокировать записи, чтобы вернуть отдельные образцы.Эта стратегия должна привести к более высокой производительности, чем чтение образцов по отдельности.

Мы обнаружили, что производительность пропускной способности улучшится, если мы объединим использование tfio.arrow.ArrowFeatherDataset с tf.data.Dataset.interleave:

 import tensorflow as tf 
import tensorflow_io as tfiodef get_dataset () = tf138 autotune. data.experimental.AUTOTUNE
filenames = tf.data.Dataset.list_files ( + '/ *',
shuffle = True)
def make_ds (file):
ds = arrow_io.ArrowFeatherDataset (
[файл], [0,1],
output_types = (tf.uint8, tf.uint8),
output_shapes = ([32 * 32 * 3,], []),
batch_mode = 'auto')
return ds
ds = filenames.interleave (make_ds,
num_parallel_calls = autotune,
terministic = False)
ds = ds.unbatch ()
return ds

TensorFlow I / O контраст : In / O Parquet Dataset Feather Класс набора данных, функция from_parquet получает один файл Parquet .Однако мы можем преодолеть это ограничение, используя tf.data.Dataset.interleave, как показано ниже в наборе данных Cifar10, хранящемся в формате Parquet :

 import tensorflow as tf 
import tensorflow_io as tfiodef get_dataset ():
autotune = tf .data.experimental.AUTOTUNE
filenames = tf.data.Dataset.list_files ( + '/ *',
shuffle = True)
def parquet_ds (file):
ds = tfio.IODataset.from_parquet (файл,
{'изображение': tf.string,
'ярлык': tf.int32})
return ds
ds = filenames.interleave (parquet_ds,
num_parallel_calls = autotune,
terministic = False)
def parse (example):
image = tf.io.decode_raw (example ['image'], tf.uint8)
image = tf.reshape (image, [32, 32, 3])
label = example ['label']
return image, label
ds = ds.map (parse, num_parallel_calls = autotune)

return ds

Petastorm

API TensorFlow библиотеки петастормов определяет функцию make_petastorm_dataset для создания TensorFlow tf.data.Dataset из программы чтения петасторм (petastorm.reader.Reader). Источником этого набора данных может быть формат Petastorm или необработанный формат Parquet . Для чтения из набора данных в формате Petastorm мы создаем считыватель с помощью API make_reader. Для чтения из набора данных в формате Parquet мы создаем считыватель с помощью API make_batch_reader. Между двумя считывающими устройствами, описанными в таблице, есть несколько тонких различий. Обратите внимание, что TensorFlow tf.data.Dataset, созданный из формата Petastorm , возвращает последовательности отдельных выборок данных, тогда как TensorFlow tf.data.Dataset, созданный из необработанного формата Parquet , возвращает пакеты выборок данных, размер которых определяется размером группы строк Parquet .

В блоке кода ниже мы демонстрируем использование make_petastorm_dataset API для создания TensorFlow tf.data.Dataset из данных Cifar10, хранящихся в формате Petastorm .

 from petastorm import make_reader 
from petastorm.tf_utils import make_petastorm_datasetdef get_dataset ():
with make_reader ('') as reader:
ds = make_petastorm_dataset (reader)
return ds продемонстрировать использование make_petastorm_dataset API для создания TensorFlow tf.data.Dataset из данных Cifar10, хранящихся в формате Parquet .

 из petastorm импортируйте make_batch_reader 
из petastorm.tf_utils import make_petastorm_datasetdef get_dataset ():
autotune = tf.data.experimental.AUTOTUNE
с make_batch_reader ('<путь к данным>') в качестве считывателя:
ds = make_petastorm_dataset (считыватель) 90s.138 ds (пример):
image, label = example
image = tf.io.decode_raw (image, tf.uint8)
image = tf.reshape (image, [32, 32, 3])
return image, label
ds = ds.map (parse, num_parallel_calls = autotune)
return ds

Обратите внимание, как мы используем подпрограмму unbatch для возврата отдельных выборок.

В этом разделе мы делимся результатами нескольких экспериментов. Все эксперименты проводились на инстансе c5.2xlarge Amazon EC2 (который имеет 8 виртуальных ЦП) с TensorFlow версии 2.4.1, TensorFlow I / O версии 0.17.1 и петастормом версии 0.11.0. Эксперименты были разделены на две части. Сначала мы экспериментировали с различными методами передачи данных Cifar10, хранящихся в форматах файлов, которые мы обсуждали, в сеанс TensorFlow. Мы создали несколько копий данных, чтобы искусственно раздуть набор данных.Для этих экспериментов мы решили установить размер обучающего пакета равным 1024.

Чтобы оценить, как размер выборочных записей повлиял на относительную производительность, мы выполнили второй набор тестов, в который добавили случайный массив байтов размером 2 МБ. по размеру для каждой выборки данных Cifar10. Для этих экспериментов мы решили установить размер обучающего пакета равным 16.

Для всех экспериментов наборы данных были разделены на базовые файлы размером 100–200 МБ.

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

 время импорта 
ds = get_dataset (). Batch (batch_size)
round = 0
start_time = time.time ()
для x в ds:
round = round + 1
if round% 100 == 0:
print ("round {}: epoch time: {}".
format (round, time.time () - start_time))
start_time = time.time ()
if round == 2000:
break

Обратите внимание, что в В случае петашорма обход набора данных должен быть перемещен в контекст читателя петасторма.

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

  1. Производительность решений, вероятно, будет сильно различаться в зависимости от модели, набора данных и среды обучения.
  2. Для конкретного варианта использования производительность каждого решения будет зависеть от специфики настройки формата и набора данных TensorFlow, включая: размер каждого файла, размер групп строк, использование сжатия схемы, количество рабочих процессов, размер каждой выборки и т. д.
  3. Эксперименты измеряют максимальную пропускную способность решений путем итерации непосредственно над наборами данных TensorFlow. На практике пропускная способность должна быть достаточно высокой, чтобы тренировка была занята. Другими словами, до тех пор, пока у нас нет узких мест при вводе-выводе, мы можем быть полностью довольны пропускной способностью ниже максимальной.
  4. К тому моменту, когда вы прочтете этот пост, версии библиотек, которые я использовал, могли быть устаревшими. Новые версии библиотек могут включать изменения, влияющие на их производительность.
  5. И последнее, но не менее важное - это вероятность ошибок в моих экспериментах. Когда вы их найдете, пожалуйста, напишите мне.
Результаты теста (меньше секунд на шаг - лучше)

Результаты демонстрируют силу формата TFRecord и TFRecordDataset . В частности, мы можем видеть их стабильность, несмотря на различия в настройках среды. В то же время некоторые другие эксперименты привели к тому, что пропускная способность обучения не бледнеет по сравнению с этим. Хотя мы считаем результаты обнадеживающими, важно отметить нестабильность альтернативных решений в двух протестированных нами случаях.Решения, которые работают хорошо (по сравнению с форматом TFRecord ) в одном сценарии, по-видимому, не работают в другом. Казалось бы, в отличие от использования формата TFRecord , адаптация других форматов для использования в различных настройках обучения может потребовать некоторых дополнительных усилий. Учитывая преимущества альтернативных форматов, которые мы обсуждали в этом посте, эти усилия могут окупиться.

Еще одним интересным показателем является загрузка ЦП, связанная с каждой из опций.В недавнем сообщении в блоге мы обсуждали возможность возникновения узких мест в конвейере обучения, которые вызваны достижением максимального использования одного или нескольких процессоров. В случаях, когда такая возможность вызывает беспокойство, было бы разумно оценить, как различные решения, связанные с хранением данных, влияют на использование ЦП при загрузке и анализе данных. К ним относятся выбор формата файла, сжатие (и распаковка) данных, метод создания набора данных TensorFlow и многое другое. В таблице ниже мы перечисляем среднюю загрузку ЦП для трех наиболее производительных решений экспериментов Cifar10.Использование ЦП было зафиксировано с помощью метрик инстансов Amazon EC2 в Amazon CloudWatch. Поскольку в используемом нами экземпляре 8 виртуальных ЦП, максимальная загрузка составляет 800%.

Использование ЦП (из 800% - чем ниже, тем лучше)

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

Справочник по текстурам ковров | Ковры Weaver

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

Вот 7 самых популярных текстур ковров, что они означают, и чем они отличаются по прочности и ощущениям.

Свая петли уровня

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

Берберский

Берберский ковер может иметь несколько значений, но традиционно это ворс Level Loop, сделанный из более толстой пряжи, обычно нейтрального оттенка с вкраплениями цвета.Он прочный, потому что петли не обрезаны, поэтому он отлично подходит для участков с интенсивным движением. Кроме того, изменение цвета означает, что он довольно хорошо скрывает грязь и пятна. Ковры Berber задерживают грязь, и их легче повредить, чем Level Loop.

Куча с нарезкой и петлей

Этот тип ковров популярен благодаря своей прочности, устойчивости к раздавливанию и тому факту, что это хороший вариант для помещений с низкой и высокой проходимостью.Cut & Loop - это комбинация обрезной и петлевой пряжи, которая создает красивый узорчатый эффект и текстуру поверхности.

Бархат и плюш

Бархатные и плюшевые ковровые покрытия - это типы ворса Cut Loop, которые имеют более легкий изгиб, что делает текстуру слегка плюшевой или бархатной, что лучше всего подходит для помещений с низкой проходимостью. Это отлично подходит для спален и гостиных, там будут видны дорожные знаки.Коврики обычно используют этот стиль ворса.

Саксония

Saxony - еще один тип ковров Cut Loop с более длинным ворсом, что делает его глубоким и мягким. Эта текстура ковра состоит из плотно уложенных скрученных ворсов, которые стоят вертикально вверх. Благодаря своей высоте и равномерному направлению они легко оставляют следы и следы вакуума.

Friezé

Friezé похож на Saxony в том, что это более длинный ворс Cut Loop, но он имеет тенденцию быть более случайным, потому что плотно скрученные ворсы лежат в разных направлениях, создавая менее однородный вид.Ковер по-прежнему плотный и мягкий, но он хорошо работает в местах с интенсивным движением, потому что на нем не видны следы и следы от вакуума. Когда ворс Friezé достигает определенной длины, он считается ворсистым ковровым покрытием.

Многоуровневая петля

Комбинируя стопки разной высоты, Multi-Level Loop предлагает случайную текстуру, которая отлично подходит для зон с интенсивным движением и офисных помещений.Это делается для создания геометрического узора на одно- или многоцветном ковре, будь то полосы, ромбики или что-то еще. Одним из недостатков кучи многоуровневых петель является то, что более длинные петли имеют тенденцию удерживать больше грязи.

Вам нужно новое ковровое покрытие в вашем доме или офисе в Денвере? Свяжитесь с нами сегодня! Мы предлагаем напольные покрытия оптом, поэтому вы можете быть уверены, что получаете лучший товар по лучшей цене.

Python читает паркетный файл | Python для цикла

Самые популярные вопросы


На вопрос wiki @ , просмотрели 209 человек

Форматировать дату и время в строку с миллисекундами. Я хочу, чтобы строка даты и времени начиналась с даты с миллисекундами.…


На вопрос wiki @ , просмотрели 151 человек

Однострочное выражение «for» в Python Я не уверен, нужна ли мне лямбда или что-то еще. Но все же мне нужен…


На вопрос wiki @ , просмотрели 139 человек

Что означает знак процента в Python В учебнике есть пример поиска простых чисел: >>>…


На вопрос wiki @ , просмотрели 135 человек

Каково значение слова «я»? Какова цель слова self в Python? Я понимаю…


На вопрос wiki @ , просмотрели 134 человека

Определить тип объекта? Есть ли простой способ определить, является ли переменная списком, словарем,…


Запрошено вики @ , просмотрено 133 человека

Добавление нового столбца в существующий DataFrame в Python pandas У меня есть следующий индексированный DataFrame с именованными столбцами и строками…


На вопрос wiki @ , просмотрели 132 человека

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


На вопрос wiki @ , просмотрели 131 человек

Список сортировки структур данных Python в алфавитном порядке Я немного запутался в отношении структуры данных в Python; (),[], и {}.Я…


На вопрос вики @ , просмотрели 128 человек

Генерировать случайные целые числа от 0 до 9 Как я могу сгенерировать случайные целые числа от 0 до 9 (включительно) в Python? …


На вопрос вики @ , просмотрено 124 людьми

Python: создать фрейм данных pandas из списка. Я использую следующий код для создания фрейма данных…


На вопрос вики @ , просмотрели 116 человек

Каково значение слова «я»? Какова цель слова self в Python? Я понимаю…


На вопрос wiki @ , просмотрели 115 человек

х.shape [0] vs x [0] .shape в NumPy Допустим, у меня есть массив с x.shape = (10,1024), когда я пытаюсь напечатать…


На вопрос wiki @ , просмотрели 113 человек

Найти текущий каталог и каталог файла [дубликат] На этот вопрос уже есть ответы здесь: Как правильно определить текущий…


На вопрос wiki @ , просмотрели 112 человек

Какая критическая интерфейсная графика для Python? [duplicada] Essa pergunta já tem uma resposta aqui: Возможные графические интерфейсы для…


На вопрос wiki @ , просмотрели 111 человек

Python OpenCV2 (cv2) обертка для получения размера изображения? Как получить размер изображения в оболочке cv2 в…

Руководство по покупке ковровых покрытий

Хорошо, теперь, когда вы ознакомились с основами, пора поговорить о многих типах амортизации ковров.

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

Ковровое покрытие из вспененного материала Rebonded

Ковровые подкладки из вспененного повторно скрепленного материала являются наиболее часто используемой подложкой для ковровых покрытий. Насколько часто? Что ж, по данным Совета по ковровым подушкам, 85% всего коврового покрытия, производимого в Соединенных Штатах, представляет собой повторно скрепленную пену. Боб Кларк из Совета по ковровым подушкам говорит, что повторное соединение пены - это «значительная история успеха в переработке», поскольку она содержит 100% переработанную пену, что позволяет сэкономить миллиарды фунтов пены на свалках.

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

Плюсы
  • Самый популярный вариант: Иногда самый популярный вариант - не лучший выбор, но в данном случае это так! Прокладки из вспененного материала популярны не случайно - это долговечность и ценность.
  • Стоимость: Если говорить о стоимости, клееный пенопласт предлагает широкий диапазон цен, плотности и толщины, что делает его самым выгодным вариантом.
  • Экологичность: Ковровые подкладки из вспененного склеенного материала - самые экологически чистые ковровые подкладки. Они сделаны из 100% переработанной пены.
  • Долговечность: Связанная набивка очень прочная, с множеством различных вариантов плотности и толщины, поэтому вы можете правильно подобрать ковровую подкладку к вашему ковру.
Минусы
  • Проходимость: Если у вас очень много пешеходов, например, в коммерческих помещениях, вы можете подумать о чем-нибудь еще более прочном.

Коврик Prime Foam Pad

Прокладка из пенопласта Prime изготовлена ​​из «первичного» пенополиуретана, то есть не из переработанных материалов. Это более плотная форма того же пенопласта, используемого в мебели. Набивка из пеноматериала

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

Плюсы
  • Мягкая ступенька: Воздушные карманы из пенопласта обеспечивают очень мягкую ступеньку.
  • Недорого: Доступно множество вариантов плотности и толщины, что может сделать этот вариант недорогим.
Минусы
  • Воздушные карманы: Помните те воздушные карманы, которые мы только что упомянули? Воздушные карманы пены Prime также разрушаются со временем, что делает это плохим вариантом для интенсивного движения.
  • Прочность: Пена Prime не лучший вариант для участков с интенсивным движением, поэтому пена разрушится.

Коврик из пеноматериала с эффектом памяти

Ковровые подкладки из пены с эффектом памяти - это, по сути, вспененная пена, но с добавлением дополнительного элемента, который придает ощущение пены с эффектом памяти.Если вы когда-нибудь лежали на матрасе из пены с эффектом памяти, вы знаете, что пена с эффектом памяти невероятно мягкая и удобная. Коврик из пеноматериала с эффектом памяти сделает ваш ковер таким же мягким, чтобы наступать на него.

Тем не менее, пена с эффектом памяти со временем сплющится, и постоянное растяжение основы ковра со временем повредит ковер. Это делает пену с эффектом памяти не идеальным для любой ситуации с интенсивным движением.

Плюсы
  • Комфорт: Ковровые покрытия из пены с эффектом памяти - самые удобные на рынке.Есть причина, по которой люди так любят матрасы из пены с эффектом памяти.
  • Прочность: Пена с эффектом памяти так же долговечна, как вспененная пена и накладки из вспененного материала. Однако при высокой посещаемости он может не работать.
Минусы
  • Expense: За эту мягкость нужно платить. Это дороже, чем 100% переработанный материал.
  • Новинка: Пена с эффектом памяти все еще находится на новой стороне индустрии ковровых покрытий. Трудно сказать, насколько хорошо эта новая пена устоит со временем.

Коврик из волокна

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

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

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *