Фасонная часть трубопровода это: Фасонная часть (деталь) трубопровода

Содержание

Что такое фасонные части трубопроводов

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

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

Составляющие трубопровода

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

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

Какие виды бывают

Основное назначение фасонных частей трубопровода — обеспечение надёжного соединения всех его элементов.

По своему предназначению фасонные изделия подразделяются на следующие виды:

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

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

Какой материал лучше

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

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

Смотрите также:

Что делают сначала: натяжной потолок или обои http://domkrat.org/chto-delayut-snachala-natyazhnoy-potolok-ili-oboi/.

Интересное по теме: Виды фасадных материалов

Советы в статье «Как крепить унитаз к полу?» здесь.

Надежные трубопроводные системы смотрим в видео:

Tweet

Фасонная часть — трубопровод — Большая Энциклопедия Нефти и Газа, статья, страница 1

Фасонная часть — трубопровод

Cтраница 1

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

Фасонные части трубопроводов — служат для соединения отдельных отрезков труб или же выполняют следующие функции: изменение диаметра или направления трубопровода; ответвление от трубопровода одной или двух линий того же или меньшего диаметра.
 [2]

Фасонные части трубопроводов, в которых сливаются или разделяются два потока ( рис. 46), называют тройниками.
 [3]

Фасонные части трубопровода из вини-пласта изготовляются из труб и листов путем механической обработки, склейки и сварки составных частей.
 [4]

Фасонные части трубопроводов изготовляются заводами согласно ГОСТ и ОСТ.
 [6]

Фасонные части трубопроводов из ПВП производятся на термопластавтоматах способом литья под давлением из литьевых марок полиэтилена. Изготавливаются этим способом следующие фасонные части трубопроводов: муфты, угольники, тройники, крестовины, переходы, ниппеля, футорки, втулки буртовые, накладные гайки, втулки резьбовые, втулки под фланец, фланцы стальные.
 [8]

Фасонные части трубопроводов, арматура и места установки реперов для замера ползучести металла труб изолируются изделиями, выполненными в металлических чехлах на замках.
 [10]

Фасонными частями трубопровода называют такие его детали, которые служат для изменения направления трубопровода или его диаметра или, наконец, для разделения на отдельные потоки вещества, протекающего по трубопроводу. К фасонным частям относятся: отводы, переходы, крестовины, развилки и некоторые другие детали.
 [12]

Фасонными частями трубопровода называются такие его детали, которые служат для изменения направления трубопровода или его диаметра или, наконец, для разделения на отдельные потоки протекающего по трубопроводу вещества. К фасонным частям относятся: отводы, переходы, крестовины, развилки и некоторые другие детали.
 [13]

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

фасонная часть трубы — это… Что такое фасонная часть трубы?



фасонная часть трубы
fitting

Большой англо-русский и русско-английский словарь.
2001.

  • фасонная фрезеровка
  • фасонная штамповка

Смотреть что такое «фасонная часть трубы» в других словарях:

  • фасонная часть трубы — фитинг арматура соединительная часть трубы трубопроводная обвязка соединительная деталь трубопровода — [http://slovarionline.ru/anglo russkiy slovar neftegazovoy promyishlennosti/] Тематики нефтегазовая промышленность Синонимы… …   Справочник технического переводчика

  • фасонная часть — 3.3 фасонная часть : Присоединяемое к трубе изделие, которое обеспечивает отклонение, изменение направления трубопровода. Источник …   Словарь-справочник терминов нормативно-технической документации

  • фасонная часть (деталь) — 3.2 фасонная часть (деталь): Деталь или сборочная единица трубопровода или трубной системы, обеспечивающая изменение направления, слияние или деление, расширение или сужение потока рабочей среды. Источник …   Словарь-справочник терминов нормативно-технической документации

  • СТО ЦКТИ 10.002-2007: Элементы трубные поверхностей нагрева, трубы соединительные в пределах котла и коллектора стационарных котлов. Общие технические требования к изготовлению — Терминология СТО ЦКТИ 10.002 2007: Элементы трубные поверхностей нагрева, трубы соединительные в пределах котла и коллектора стационарных котлов. Общие технические требования к изготовлению: 3.1.39. гиб : Криволинейный участок гнутого отвода,… …   Словарь-справочник терминов нормативно-технической документации

  • ГОСТ Р 54772-2011: Трубы вентиляционные гибкие шахтные и фасонные части к ним. Общие технические требования и методы испытаний — Терминология ГОСТ Р 54772 2011: Трубы вентиляционные гибкие шахтные и фасонные части к ним. Общие технические требования и методы испытаний оригинал документа: 3.18 армированные вентиляционные гибкие трубы: Трубы, изготовленные из заготовок… …   Словарь-справочник терминов нормативно-технической документации

  • СТО 79814898 747-2006: Детали и элементы трубопроводов ТЭС на давление до 2,2 МПа (22 кгс/см2). Трубы и прокат. Сортамент — Терминология СТО 79814898 747 2006: Детали и элементы трубопроводов ТЭС на давление до 2,2 МПа (22 кгс/см2). Трубы и прокат. Сортамент: 3.1.1 деталь по ГОСТ 2.101 Определения термина из разных документов: деталь 3.1.2 колено (отвод): Фасонная… …   Словарь-справочник терминов нормативно-технической документации

  • ГОСТ 30732-2006: Трубы и фасонные изделия стальные с тепловой изоляцией из пенополиуретана с защитной оболочкой. Технические условия — Терминология ГОСТ 30732 2006: Трубы и фасонные изделия стальные с тепловой изоляцией из пенополиуретана с защитной оболочкой. Технические условия оригинал документа: 3.4 бесканальная прокладка: Прокладка трубопроводов непосредственно в грунте.… …   Словарь-справочник терминов нормативно-технической документации

  • ТУ 1461-065-50254094-2004: Трубы, фасонные части из высокопрочного чугуна с шаровидным графитом для сварных соединений теплосетей, тип соединения — нахлесточный — Терминология ТУ 1461 065 50254094 2004: Трубы, фасонные части из высокопрочного чугуна с шаровидным графитом для сварных соединений теплосетей, тип соединения нахлесточный: 3.1 высокопрочный чугун с шаровидным графитом : Тип чугуна, в котором… …   Словарь-справочник терминов нормативно-технической документации

  • ТУ 1461-072-50254094-2006: Трубы, фасонные части из высокопрочного чугуна с шаровидным графитом для пожарных трубопроводов — Терминология ТУ 1461 072 50254094 2006: Трубы, фасонные части из высокопрочного чугуна с шаровидным графитом для пожарных трубопроводов: 3.1 высокопрочный чугун с шаровидным графитом (ЧШГ): Тип чугуна, в котором графит присутствует… …   Словарь-справочник терминов нормативно-технической документации

  • Тройник — Фасонная деталь трубопровода для слияния или деления потоков транспортируемого вещества под углом 90 °. В зависимости от способа изготовления подразделяются на бесшовные, сварные и штампосварные Источник: ПБ 03 108 96: Правила устройства и… …   Словарь-справочник терминов нормативно-технической документации

  • СТО ЦКТИ 10.018-2009: Газотрубные котлы. Требования к проектированию, конструкции, изготовлению, монтажу, ремонту и эксплуатации — Терминология СТО ЦКТИ 10.018 2009: Газотрубные котлы. Требования к проектированию, конструкции, изготовлению, монтажу, ремонту и эксплуатации: 3.1.34 анкерная связь: Деталь котла, служащая для подкрепления участков плоских днищ корпуса котла и… …   Словарь-справочник терминов нормативно-технической документации

фасонная+часть+трубопровода — с немецкого на русский

сущ.

1) общ. место прикрепления, начало образования, основание, появление, предрасположение, склонность, начало, образование

2) геол. зачаток, рудимент

4) спорт. начало движения, подготовка, разгон, старт, переход к новому шагу , изготовка

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

7) хим. заправка, приготовление , приготовление

8) стр. нарост, наставка, исходный состав смеси, приготовление

9) матем. подстановка, составление уравнения , исходная посылка, подход, попытка, математическое выражение

10) юр. величина, концепция, намётка, подход (konzeptionelles), постановка

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

12) бухг. ставка (напр. налога) или норама (напр. амортизации)

13) авт. выступ, заплечик ушко, композиция, состав

14) артил. ушко, борода

16) дор. навар, положение, привар, установка, формула, формулировка

17) метал. нагар, накипь, налёт, настыль, отложение, осадок

18) муз. мундштук, насадка, придаток, амбушюр , постановка губ, приставка

19) полигр. загрузка, смесь

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

22) нефт. заложение, нагар отложение, закладка
23) пищ. вытяжка, дрожжевое тесто, дрожжевой затор, дрожжевая закваска, настой, исходная смесь

26) свар. гайки, заточка (напр., уступ

27) бизн. числовая величина, числовое выражение, статья счёта, шифровое выражение

30) аэродин. условие, закон, насадок

31) ВМФ. введение в боевые действия, постановка боевой задачи

33) судостр. колено, наделка, накипь , начало процесса, примесь, присадка, сопло, удлинение, верхняя часть форштевня

Путешествие по графическому конвейеру 2011, часть 10

Этот пост является частью серии «Путешествие по графическому конвейеру 2011».

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

Существует несколько трубопроводов / анатомия ступени трубопровода

Это относится к части 3, но достаточно важно повторить ее: если вы посмотрите, например, документацию D3D10, вы найдете схему «конвейера D3D10», которая включает все этапы, которые могут быть активными. «Конвейер D3D10» включает шейдинг геометрии, даже если у вас нет набора шейдеров геометрии, и то же самое для Stream-Out. В чисто функциональной модели D3D10 этап затенения геометрии присутствует всегда; если вы не установите шейдер геометрии, это будет очень просто (и скучно): данные просто передаются без изменений на следующий этап (этапы) конвейера (растеризация / потоковая передача).

Это правильный способ указать API, но неверно думать об этом в этой серии статей, где мы озабочены тем, как эта функциональная модель фактически реализована на оборудовании. Итак, как выглядят два этапа шейдера, которые мы видели до сих пор? Для VS мы прошли через Input Assembler, который подготовил блок вершин для затенения, затем отправил этот пакет в шейдерный блок (который некоторое время его жует), а затем через некоторое время мы получаем результаты обратно, записываем их в буфер (для примитивной сборки), убедитесь, что они в правильном порядке, затем отправьте их на следующий этап конвейера (отсечение / отсечение и т. д.). Для PS мы получаем от растеризатора четырехугольники, которые должны быть закрашены, группируем их, буферизуем их на некоторое время, пока шейдерный блок не сможет принять новый пакет, отправляем пакет в шейдерный блок (который пережевывает его в течение некоторого времени). while), а через некоторое время мы получаем результаты обратно, записываем их в буфер (для ROP), убеждаемся, что они находятся в правильном порядке, затем выполняем blend / late Z и отправляем результаты в память. Звучит знакомо, не правда ли?

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

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

Форма Трис в тени

Итак, давайте посмотрим, как выглядят наши буферы ввода-вывода для геометрических шейдеров. Начнем с ввода. Что ж, это довольно просто — это именно то, что мы написали с помощью вершинного шейдера! Ну, не совсем; шейдер геометрии смотрит на примитивы, а не на отдельные вершины, поэтому нам действительно нужен вывод Primitive Assembly (PA).Обратите внимание, что есть несколько способов справиться с этим; PA может расширять примитивы (дублируя вершины, если на них ссылаются несколько раз), или он может просто передать нам один блок вершин (я буду придерживаться 32 вершин, которые использовал ранее) с соответствующим небольшим «индексным буфером» (поскольку мы индексируем блок из 32 вершин, нам просто нужно 5 бит на индекс). В любом случае работает нормально; первый является естественным входным форматом для клипа / отсечения, который я обсуждал после PA, но последний требует гораздо меньше места в буфере при запуске GS, поэтому я буду использовать эту модель здесь.

Одна из причин, по которой вам нужно беспокоиться о размере буферного пространства с GS, заключается в том, что он может работать с некоторыми довольно большими примитивами, потому что он поддерживает не только простые линии или треугольники (2 и 3 вершины на примитив соответственно), но также и строки / треугольники с информацией о смежности (4/6 вершин на примитив). И D3D11 добавляет примитивы ввода, которые еще намного толще — GS также может потреблять патчи с 32 контрольными точками в качестве ввода. Дублирование вершин, например, патч с 16 контрольными точками, каждый из которых может иметь до 16 векторных атрибутов (32 в D3D11)? Это серьезная трата памяти.Поэтому я предполагаю, что для этого пути не будут дублироваться индексированные вершины. Что делает ввод для пакета примитивов: вывод VS плюс (относительно небольшой) индексный буфер.

Теперь геометрический шейдер работает для каждого примитива. Для вершинных шейдеров нам нужно было собрать пакет вершин, и мы выбрали размер пакета с помощью простого жадного алгоритма, который пытается упаковать как можно больше вершин в пакет, не разделяя примитив на несколько пакетов — достаточно справедливо. А для пиксельного затенения мы получаем из растеризатора много квадратов и упаковываем их в пакеты.Геометрические шейдеры немного более неудобны — наш входной блок гарантированно будет содержать по крайней мере один полный примитив, а возможно и несколько — но в остальном количество примитивов в этом блоке полностью зависит от скорости попадания в кеш вершин. Если он высокий и мы используем треугольники, мы можем получить что-то вроде 40–43; если мы используем треугольники с информацией о смежности, у нас может быть всего 5, если нам не повезет.

Конечно, здесь можно попробовать собрать примитивы из нескольких входных блоков, но это тоже немного неудобно.Теперь нам нужно сохранить несколько входных блоков и индексных буферов для одного пакета GS, и если один пакет может ссылаться на несколько индексных буферов, это означает, что каждый примитив в этом пакете теперь должен знать, откуда брать индексы и данные вершин — больше требований к хранилищу, больше управления, больше накладных расходов. Тоже некрасиво. И, конечно же, даже с двумя входными блоками вы все равно будете плохо использовать их, если попадете в два входных пакета с низкой частотой попаданий в кэш вершин. Вы можете поддерживать больше входных блоков, но это съедает память — и помните, вам также нужно место для выходной геометрии (я к этому немного вернусь).

Итак, это наша первая загвоздка: с VS мы могли в основном выбирать наш целевой размер партии, и мы решили не всегда генерировать полные партии, чтобы жить в PA (и здесь, в GS, а затем и в HS тоже ) немного проще. С помощью PS мы всегда затемняем четверные, и даже довольно маленькие трисы обычно попадают в несколько четырехугольников, поэтому мы получаем нормальное соотношение количества четырехугольников к количеству трисов. Но с GS у нас нет полного контроля над любым концом конвейера (поскольку мы находимся посередине!), И нам нужно несколько входных вершин для каждого примитива (в отличие от нескольких четырехугольников на один входной треугольник), поэтому буферизация ввод большого количества данных обходится дорого (как с точки зрения памяти, так и с точки зрения получаемых нами накладных расходов на управление).

На этом этапе вы можете в основном выбрать, сколько входных блоков вы хотите объединить, чтобы получить один блок примитивов с геометрическим оттенком; это число будет низким из-за требований к памяти (я был бы очень удивлен, если бы увидел больше, чем 4), и в зависимости от того, насколько важен, по вашему мнению, GS, вы можете даже выбрать 1, т.е. не объединять ввод блоки вообще и живут с дрянным использованием затененных блоков GS / Warps / Wavefronts! Это не очень хорошо с треугольниками и очень плохо с примитивами, которые имеют еще больше вершин, но не представляет большой проблемы, когда ваш основной вариант использования GS на практике расширяет точки до четырехугольников (точечных спрайтов) и, возможно, отрисовывает случайную карту теней куба ( используя индекс массива видовых экранов / индекс рендеринга — я вернусь к этому чуть позже).

GS output: ни розария здесь, ни

Так как там на выходной стороне? Опять же, это сложнее, чем простой поток данных VS. На самом деле, намного сложнее; в то время как VS выводит только одно (заштрихованные вершины) с соответствием 1: 1 между незатененными и заштрихованными вершинами, GS выводит переменное количество вершин (до максимального значения, указанного во время компиляции), а с D3D11 он также может иметь несколько выходных потоков — однако по остальной части конвейера может быть отправлен максимум один поток, о котором я сейчас говорю.Другой пункт назначения для данных GS (Stream-Out) будет рассмотрен в следующей части.

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

Также обратите внимание, что GS вводит примитивов (например, точки, линии, треугольники или патчи, необязательно с информацией о смежности), но выводит вершин — даже если мы отправляем примитивы в растеризатор! Если тип выходного примитива — точки, это тривиально. Однако для линий и треугольников нам нужно снова собрать эти вершины обратно в примитивы. Для этого выходные вершины образуют линию или полосу треугольников соответственно. Это хорошо справляется с, пожалуй, тремя наиболее важными случаями: одиночными линиями, треугольниками или четырехугольниками.Это не так удобно, если GS пытается выполнить какое-то фактическое выдавливание или сгенерировать иначе «сложную» геометрию, для чего часто требуется несколько маркеров «полосы перезапуска» (которые сводятся к одному биту на вершину, который обозначает, продолжается ли текущая полоса или новая полоса запущена). Так почему ограничение? На уровне API это кажется довольно произвольным — почему GS не может просто выводить список вершин вместе с небольшим буфером индекса?

Ответ сводится к двум словам: примитивная сборка.Вот что мы здесь делаем — берем несколько вершин и собираем их в полный примитив для отправки по конвейеру. Но мы уже используем этот функциональный блок в этом пути данных, прямо перед GS. Итак, для GS нам нужен второй этап сборки примитивов, который мы хотели бы сохранить простым, а сборка полос треугольников действительно очень проста: треугольник всегда состоит из 3 вершин из выходного буфера в последовательном порядке, с небольшим количеством клея. логика для отслеживания текущего порядка намотки.Другими словами, полосы не намного сложнее поддерживать, чем, возможно, самый простой из всех примитивов (неиндексированные линии / треугольники), но они по-прежнему экономят пространство выходного буфера (и, следовательно, дают нам больше возможностей для параллелизма) для типичных примитивов. как квадроциклы.

API заказать снова

Здесь, однако, есть несколько проблем: в обычном пути затенения вершин мы точно знаем, сколько примитивов в пакете и где они находятся, даже до того, как затененные вершины попадут в буфер PA — все это фиксируется с точки где мы настраиваем партии для затемнения.Если у нас, например, есть несколько модулей для настройки отсечения / обрезки / треугольника, все они могут запускаться параллельно; они знают, откуда брать данные о вершинах, и могут заранее знать, какой «порядковый номер» будет у их треугольника, чтобы все это можно было привести в порядок.

Для GS мы обычно не знаем, сколько примитивов мы собираемся сгенерировать до того, как получим выходные данные — на самом деле, мы могли бы и не создать их! Но нам по-прежнему нужно соблюдать порядок API: сначала все примитивы, сгенерированные из вызова GS 0, затем все примитивы из вызова 1 и так далее, до конца пакета (и, конечно, пакеты также должны обрабатываться по порядку. , как и с VS).Итак, для GS, как только мы получим результаты, нам сначала нужно просмотреть выходные данные, чтобы определить места, где начинаются полные примитивы. Только после этого мы сможем начать настройку отбраковки, обрезки и треугольника (возможно, параллельно). Больше дополнительной работы!

VPAI и RTAI

Это две функции, добавленные с GS, которые на самом деле не влияют на выполнение шейдера геометрии, но оказывают некоторое влияние на последующую обработку, поэтому я подумал, что упомянул бы их здесь: Индекс массива области просмотра (здесь для краткости VPAI) и индекс целевого массива рендеринга (RTAI).Во-первых, RTAI, поскольку это немного проще объяснить: как вы, надеюсь, знаете, D3D10 добавляет поддержку массивов текстур. Что ж, RTAI дает вам поддержку рендеринга в массив текстур: вы устанавливаете массив текстур в качестве цели рендеринга, а затем в GS вы можете выбрать для каждого примитива, в какой индекс массива должен перейти примитив. Обратите внимание: поскольку GS записывает вершины, а не примитивы, нам нужно выбрать одну вершину, которая выбирает RTAI (а также VPAI) для каждого примитива; это всегда «ведущая вершина», т.е. первая указанная вершина, принадлежащая примитиву.Одним из примеров использования RTAI является рендеринг кубических карт за один проход: GS для каждого примитива решает, на какую из граней куба он должен быть отправлен (возможно, несколько из них). VPAI — это ортогональная функция, которая позволяет вам установить несколько видовых экранов и ножниц (до 15), а затем решить для каждого примитива, какой видовой экран использовать. Это можно использовать, например, для визуализации нескольких каскадов в каскадной карте теней за один проход, а также можно комбинировать с RTAI.

Как уже говорилось, обе функции существенно не влияют на обработку GS — это просто дополнительные данные, которые прикрепляются к примитиву, а затем используются позже: VPAI потребляется во время преобразования области просмотра, в то время как RTAI сокращает его до пиксельный конвейер.

Итоги

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

Если это звучит сложнее, чем то, что было в случае с VS-only, то потому, что это так. Вот почему я упомянул выше, что ошибочно думать о GS как о чем-то, что всегда работает — даже очень простой GS, который ничего не делает, кроме передачи текущего треугольника, проходит еще две стадии буферизации, дополнительный раунд примитивной сборки и может выполняться на шейдерных модулях с плохой загрузкой. Все это имеет свою цену и имеет тенденцию складываться: я проверил это, когда оборудование D3D10 было довольно новым, и на оборудовании AMD и NVidia даже чистый сквозной GS был в 3-7 раз медленнее, чем отсутствие GS вообще. (то есть в сценарии с ограниченной геометрией).Я не проводил повторно этот эксперимент на более новом оборудовании; Я бы предположил, что к настоящему времени он стал лучше (это было первое поколение, реализующее GS, и функции обычно не имеют хорошей производительности в первом поколении GPU, которое их реализует), но точка все еще остается в силе: просто отправить что-то через GS труба, даже если там вообще ничего не происходит, имеет очень заметную стоимость.

И то, что GS производят примитивы как полосы, последовательно, не помогает; для вершинного шейдера мы получаем по одному вызову на вершину, который считывает одну вершину и записывает одну вершину (хорошо).Однако для GS у нас может получиться только партия из 11 GS (потому что во входном буфере не хватило примитивов), каждый из которых работает довольно долго и создает что-то вроде 8 выходных вершин. Это долгое время, чтобы работать при низкой загрузке! (Помните, что нам нужно от 16 до 64 независимых заданий на пакет, который мы отправляем шейдерным модулям). Еще больше раздражает, если GS в основном состоит из цикла — например, в случае «рендеринга в карту куба», который я упоминал для RTAI, мы перебираем 6 граней в кубе, проверяем, виден ли треугольник на этой грани, и выведите треугольник, если это так.Вычисления для 6 граней действительно независимы; если возможно, мы хотели бы запускать их параллельно!

Бонус: экземпляр GS

Что ж, введите GS Instancing, еще одну функцию, новую в D3D11 — к сожалению, плохо документированную (и я не уверен, есть ли какие-либо хорошие примеры в SDK). Однако это довольно просто объяснить: для каждого входного примитива GS запускается не один, а несколько раз (это статический счетчик, выбираемый во время компиляции). По сути, это эквивалентно обертыванию всего шейдера в

для (int я = 0; я 

, вне шейдера обрабатывается только цикл, фактически генерируя несколько вызовов GS для каждого входного примитива, что помогает нам получить большие размеры пакетов и, следовательно, лучшее использование. i экспортируется в шейдер как сгенерированное системой значение (в D3D11 с Semantic SV_GSInstanceID ). Итак, если у вас есть такой GS, просто избавьтесь от внешнего цикла, добавьте объявление [instance (N)] и объявите i в качестве ввода с правильной семантикой, и он, вероятно, будет работать быстрее при очень небольшой работе с вашей стороны - волшебство предоставления более независимых заданий массивно параллельной машине!

В любом случае, это все по геометрическим шейдерам.Я пропустил Stream-Out, но этот пост уже достаточно длинный, и, кроме того, SO - это достаточно большая тема (и достаточно независимая от GS!), Чтобы заслужить отдельную публикацию. Следующий пост, если точнее. До тех пор!

Нравится:

Нравится Загрузка ...

Связанные

.

Создание конвейера автоматизированного машинного обучения: Часть первая | автор: Ceren Iyim

Данные для этого проекта доступны в data_root / raw / wine_dataset в репозитории. На данный момент мы будем использовать 90% его в качестве обучающего набора, а оставшиеся 10% - как тестовый набор. Оба они доступны в data_root / interim как train.csv и test.csv .

Мы собираемся использовать Python 3.7, и в этой записной книжке нам потребуются следующие библиотеки:

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

Давайте загрузим обучающие и тестовые наборы данных во фреймы данных и посмотрим на некоторые строки обучающего набора данных:

 train = pd.read_csv ("../ data_root / interim / train.csv") 
test = pd. read_csv ("../ data_root / interim / test.csv")
train.sample (5)

В наборе данных есть несколько пустых строк, и у нас есть только 2 числовые переменные: точки и цена .

очков - это зависимая переменная, которую мы пытаемся предсказать, и она будет обозначаться как цель .Остальные - это независимые переменные, которые можно использовать при определении цели, и они будут обозначаться как features .

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

  • контролируемым : Набор данных включает в себя рейтинги вин (обозначенные как балла, ) и независимые переменные, которые можно использовать при определении баллов .
  • Регрессия : Наша целевая переменная - точек состоит из непрерывных целых чисел от 80 до 100.

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

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

Обозначение - это название виноградника, а region_1 & region_2 характеристики описывают места, где выращивают виноград. Вот как выглядит Barrouge Red Barlow 2005:

Источник изображения: Снимок экрана Barlow 2005 Barrouge Red на Winemag

Теперь давайте посмотрим на типы данных и количество непустых (ненулевых) данных обучения и теста. набор данных:

 поезд.info () 
 test.info () 

Это интересный набор данных, потому что 90% функций являются категориальными - переменных, которые находятся в объекте Dtype. Модели машинного обучения могут работать только с числовыми данными и ненулевыми значениями. Таким образом, мы собираемся разработать некоторые стратегии в Feature Engineering & Pre-processing для обработки категориальных данных и пропущенных значений в нашей модели.

1.1. Отсутствующие значения наборов данных:

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

Функции, для которых отсутствуют значения более 50%, вряд ли предоставят важную информацию для нашей модели. Следовательно, region_2 будет удален из обоих наборов данных.

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

1.2. Мощность нечисловых характеристик:

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

 object_columns = (train 
.select_dtypes (include = "object")
.columns)

для столбца в object_columns:
print (" {} имеет {} уникальных значений. "
.format (column,
train [column]
.nunique ()))

. Мы можем сделать вывод, что у функции есть

  • high cardinality , если у нее больше более 1000 строк из 9000: описание , обозначение , название и винодельня.
  • умеренная мощность , если она имеет более 100 строк: область , область_1 и разновидность .
  • низкая мощность , если у него меньше 100 строк: страна , region_2, taster_name и taster_twitter_handle.

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

Помните, что это образец набора данных. Поэтому мы не можем гарантировать, что увидели все возможные значения каждой категориальной характеристики при обучении модели. Если наш предсказатель рейтинга вина встречает новое значение в тестовом наборе, он выдаст ошибку. Вот почему мы собираемся вернуться к этому в статье Feature Engineering & Pre-processing.

1.3. Удаление коллинеарных объектов:

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

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

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

1,4. Результаты анализа, очистки и форматирования данных:

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

  • обозначение и винодельня из-за большого количества элементов
  • region_2 из-за наличия пропущенных значений более 50%
  • taster_twitter_handle из-за коллинеарности

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

 drop_columns = ["обозначение", "winery", "taster_twitter_handle", "region_2"] train_cleaned = CleanDatat (train, drop_columns , "points") 
test_cleaned = CleanData (test, drop_columns, "points"

Теперь мы собираемся использовать train_cleaned.csv и test_cleaned.csv , чтобы визуализировать и исследовать функции и нацеливаться дальше в Анализ разведочных данных .

Исследовательский анализ данных (EDA) - это этап, на котором мы подробно изучаем переменные и визуализируем отношения между функциями и целью. На этом этапе мы будем искать и следовать за подсказками сильных детерминаторов цели. В конце этого шага мы решим, какие функции обрабатывать в Feature Engineering & Pre-processing .

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

2.1. Распределение точек:

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

 figsize (10, 8) 
plt.rcParams ['font.size'] = 14
plot_histogram (train_cleaned, «points»)

Points показывают нормальное распределение (a в распределении очевидна колоколообразная кривая), как и ожидалось от случайной величины.Диапазон точек распределен между 80 и 100 со средним значением 88,45 и медианным значением 88. Кроме того, стандартное отклонение - мера разброса диапазона данных составляет 3,03, что дает дисперсию 9,1 в виде квадрата отклонения. Исходя из нормального распределения, можно уверенно сказать, что 95% точек лежат в диапазоне 82,5–94,5.

2.2. Распределение цен:

Когда мы строим гистограмму цены , она показывала расплывчатую картину, потому что она была сильно отклонена вправо (имеется здесь в блокноте).Чтобы получить разумный, мы будем наблюдать его в диапазоне 0–200:

 figsize (10, 8) 
plt.rcParams ['font.size'] = 14
plot_histogram (train_cleaned, "price", 200)
plt.xlim (0,200)

Это по-прежнему смещенным вправо распределением или с положительным смещением , где правый хвост длиннее, а большинство значений сосредоточено в левой части. Медиана цены составляет 25, а средняя цена - 35,5.

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

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

2.3. Точки и страна:

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

Чтобы графики были интерпретируемыми, мы построим график распределения точек для стран с более чем 100 встречами.

 # составить список стран с наибольшим количеством встречаемости 
стран = (train_cleaned ["страна"]
.value_counts ())

freq_countries = list (
стран [
стран.values> 300]
.index)

freq2_countries = list (
стран [
(country.values ​​<= 300) &
(country.values> = 100)]
.index)

 figsize (20, 10) 
plt.rcParams ['font.size'] = 14

# распределение точек графика для наиболее часто используемых стран
plt.subplot (1, 2, 1)
plot_distribution (train_cleaned, "points",
freq_countries, "country" )

plt.subplot (1, 2, 2)
plot_distribution (train_cleaned, "points",
freq2_countries, "country")

.

идиом по The Free Dictionary

Вследствие этого правление приняло решение передать дело о проекте трубопровода для белой нефти новому правительству Пакистана Техрик-и-Инсаф.

Кроме того, согласно контракту BOOT, трубопроводные активы будут переданы назначенному предприятию через 15 лет по цене всего в одну рупию.

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

Тем не менее, есть надежда на процветание, которое этот трубопровод может принести этой части нашего мира.

Трубопровод Ямал-Европа - это газопровод, который проходит через Россию и Европу.

, где E - модуль упругости заглубленного трубопровода, I - инерционный момент заглубленного трубопровода, а W - прогиб заглубленного трубопровода. Согласно отчету Transparency Market Research о мировом рынке обработки трубопроводов и трубопроводных услуг, трубопроводы является важным и доступным средством транспортировки различных видов продуктов, таких как сырая нефть, нефтепродукты, продукты нефтепереработки, природный газ, сжиженный углеводородный газ, химические вещества и вода, среди прочего, от мест бурения и добычи до терминалов хранения и конечных пользователей.5 показан процесс деформации заглубленного трубопровода под воздействием опасной породы. Предлагаемое Киндером Морганом расширение трубопровода Транс-Маунтин добавит двойной трубопровод к существующей инфраструктуре и почти утроит пропускную способность трубопроводной системы до 890 000 баррелей нефти в день. Из-за технического обслуживания системы ЦАЗ в 2001 году Узбекистан вновь открыл законсервированный трубопровод Бухара-Урал для транзита растущих объемов туркменского газа. газопровод недавно возродился из-за ускоренного роста U.S.CNPC, материнская компания PetroChina, также является крупнейшим оператором трубопроводов Китая. Кроме того, PII недавно подписала трехлетний контракт на развертывание одного из своих новейших инструментов для инспекции трубопроводов - EmatScanE [macron] AaAo CD - для проверки девяти ( 9), 150-километровый сегмент газопровода Мумба-Сидней, принадлежащий и управляемый APA Group, крупнейшим предприятием инфраструктуры природного газа в Австралии.ЭНЕРГЕТИЧЕСКИЕ РЕСУРСЫ-22 июня 2009-Kinder Morgan Louisiana Pipeline Project Completed (C) 2009 JeraOne - http: //www.jeraone.comНациональный совет по безопасности на транспорте, Управление по безопасности трубопроводов и опасных материалов Министерства транспорта (PHMSA) и трубопроводная компания продолжают расследование.
.

Как развернуть записные книжки Jupyter в качестве компонентов конвейера Kubeflow ML (часть 2) | Лак Лакшманан

Простой способ запустить блокнот Jupyter в кластере Kubernetes

Lak Lakshmanan

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

В этой статье я покажу вам простой способ запустить блокнот Jupyter в качестве контейнера в Kubernetes. (Фото Кэмерона Венти на Unsplash)

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

Шаг 1. Запустите JupyterHub

Примечание. Когда я писал эту статью, вам приходилось запускать записную книжку в самом кластере.Однако теперь гораздо лучший способ - использовать блокноты AI Platform и удаленно отправлять код в кластер. Следуйте инструкциям в этом файле README, не забудьте запустить виртуальную машину ноутбука TensorFlow 1.10. Пропустите этот шаг и начните с шага 2.

В пользовательском интерфейсе конвейеров Kubeflow (http: // localhost: 8085 / pipeline, если вы следовали инструкциям в предыдущем сообщении), щелкните ссылку для ноутбуков:

. ссылка на записные книжки из конвейеров Kubeflow для запуска JupyterHub в кластере и начала работы с записными книжками

. Вам будет предложено запустить JupyterHub, если это первый раз.Используйте свое имя пользователя / пароль GCP для входа. Затем выберите нужную версию Tensorflow:

Выберите версию TensorFlow

Я выбрал TensorFlow v1.10 на центральном процессоре.

Шаг 2. Клонировать git repo

Затем откройте окно терминала и git clone my repo:

 git clone https://github.com/GoogleCloudPlatform/data-science-on-gcp 

Вернитесь к Список записных книжек Jupyter, перейдите в data-science-on-gcp / updates / cloudml и откройте файл flight_model.ipynb.

Шаг 3. Прогнозирование задержки рейсов с помощью TensorFlow

Фактический код TensorFlow (см. Полную записную книжку здесь: flight_model.ipynb) не важен, но я хочу, чтобы вы заметили несколько вещей. Во-первых, я разработал этот блокнот в основном в режиме ожидания, для упрощения отладки:

 if EAGER_MODE: 
dataset = load_dataset (TRAIN_DATA_PATTERN)
for n, data in enumerate (dataset):
numpy_data = {k: v.numpy () for k, v в data.items ()} # .numpy () работает только в нетерпеливом режиме
print (numpy_data)
if n> 3: break

Затем я обучил модель на несколько шагов и указал больше шагов, если «Не в режиме разработки»:

 num_steps = 10 if DEVELOP_MODE else (1000000 // train_batch_size) 

Наконец, я развернул его в Cloud ML Engine как веб-службу:

 gcloud версии ml-engine создают $ {MODEL_VERSION} - -model $ {MODEL_NAME} --origin $ {MODEL_LOCATION} --runtime-version 1.10 

и убедился, что могу отправить JSON в развернутую модель:

 {"dep_delay": 14.0, "taxiout": 13.0, "distance": 319.0, "avg_dep_delay": 25.863039, "avg_arr_delay": 27.0, " carrier ":" WN "," dep_lat ": 32.84722," dep_lon ": -96.85167," arr_lat ": 31.9425," arr_lon ": -102.20194," origin ":" DAL "," dest ":" MAF "} 
{"dep_delay": -9.0, "taxiout": 21.0, "distance": 301.0, "avg_dep_delay": 41.050808, "avg_arr_delay": -7.0, "carrier": "EV", "dep_lat": 29.984444, "dep_lon" : -95.34139, "арр_лат": 27.544167, "arr_lon": -99.46167, "origin": "IAH", "dest": "LRD"}

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

Шаг 4. Развертывание ноутбука как компонента

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

Чтобы развернуть записную книжку Flight_model в качестве компонента:

  • У меня есть ячейка в верхней части записной книжки с тегом «параметры». В этой ячейке я определяю любые переменные, с которыми я захочу повторно запустить записную книжку. В частности, я установил переменную DEVELOP_MODE. В режиме разработки я буду читать небольшие наборы данных; в режиме без разработки я буду тренироваться на полном наборе данных. Поскольку я хочу, чтобы вы могли легко их изменить, я также делаю ПРОЕКТ (для выставления счета) и ВЕДРО (для хранения результатов) в качестве параметров.
  • Затем я создаю образ Docker, который может выполнять мой ноутбук. Для оформления записной книжки я воспользуюсь пакетной бумажной фабрикой Python. В моем ноутбуке используются Python3, gcloud и tensorflow. Итак, мой Dockerfile фиксирует все эти зависимости в Dockerfile
 FROM  google / cloud  -sdk: latestRUN apt-get update -y && apt-get install --no-install-рекомендует -y -q ca-Certific  python3 -dev  python3-setuptools python3-pipRUN python3 -m pip install  tensorflow == 1.10 jupyter papermill  COPY run_notebook.sh ./ENTRYPOINT ["bash", "./run_notebook.sh"] 
  • Точкой входа в образ Docker является run_notebook.sh, который использует papermill для выполнения записной книжки:
 gsutil cp $ IN_NB_GCS input.ipynb 
gsutil cp $ PARAMS_GCS params.yaml
papermill input.ipynb output.ipynb -f params.yaml --log-output
gsutil cp output.ipynb $ OUT_NB_GCS
  • По сути, копирует скрипт записная книжка, которую нужно запустить из облачного хранилища Google в модуль Kubeflow, запускает записную книжку с помощью бумажной фабрики и копирует полученные результаты обратно в облачное хранилище Google.
  • а params.yaml? Что такое params.yaml? Это настраиваемые параметры ноутбука. Например, это может быть:
 --- 
BUCKET: cloud-training-demos-ml
PROJECT: cloud-training-demos
DEVELOP_MODE: False
  • Вот и все! Когда этот образ Docker запущен, он выполнит предоставленную записную книжку и скопирует выходной блокнот (с нанесенными графиками, обученными моделями и т. Д.) В GCS.

Шаг 5. Запуск компонента портативного компьютера как части конвейера

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

 import kfp.components as comp 
import kfp.dsl as dsl # single-op pipeline that запускает полеты конвейер на модуле
@ dsl.pipeline (
name = 'FlightsPipeline',
description = 'Поезда, развертывает модель полетов'
)
def flight_pipeline (
inputnb = dsl.PipelineParam ('inputnb'),
outputnb = dsl. PipelineParam ('outputnb'),
params = dsl.PipelineParam ('params')
):
notebookop = dsl.ContainerOp (
name = 'flightmodel',
image = 'gcr.io / cloud-training-demos / submitnotebook : latest',
arguments = [
inputnb,
outputnb,
params

]
)

Ничего особенного - я создаю контейнер, говорю ему использовать мое изображение с TensorFlow, papermill и т. Д. И передаю ему блокноты ввода и вывода и параметры. По мере работы конвейера журналы передаются в журнал конвейеров и будут отображаться в Stackdriver:

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

. В моем репозитории GitHub создание и развертывание конвейера отображается в средстве запуска. .ipynb.

Попробовать

Если вы еще этого не сделали, прочтите и просмотрите Часть 1 о том, как создать и развернуть конвейер Kubeflow ML с использованием образов Docker .

Попробуйте эту статью о том, как развернуть записную книжку Jupyter в качестве компонента в конвейере Kubeflow:

  1. Запустите кластер, как описано в Части 1
  2. В кластере откройте Flight_model.ipynb, измените PROJECT и BUCKET на быть чем-то, что принадлежит вам, и запустить блокнот, чтобы убедиться, что он работает.
  3. Откройте launcher.ipynb и пройдите по этапам запуска flight_model.ipynb и в качестве компонента конвейеров Kubeflow.

Записная книжка запуска также включает в себя возможность запускать записную книжку flight_model на виртуальной машине глубокого обучения, но пока игнорируйте ее - я расскажу об этом в части 3 этой серии.

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

Когда и что использовать

  • Используйте виртуальную машину Deep Learning для разработки и автоматизации, если вы небольшая команда и у вас нет никого, кто обслуживает инфраструктуру машинного обучения, например кластеры Kubeflow. Я расскажу об этом в части 3 этой серии.
  • Если вы работаете в крупной организации, где отдельная группа платформы ML управляет вашей инфраструктурой машинного обучения (то есть кластером Kubeflow), в этой статье (часть 2) показано, как разрабатывать в записных книжках Jupyter и развертывать их в конвейерах Kubeflow.(ИТ-команда, вероятно, поможет вам с частями Docker, если вы покажете им эту статью).
  • Несмотря на то, что ноутбуки помогут вам быть гибкими, вы также накопите большой технический долг. Монолитные ноутбуки затрудняют повторное использование, а одноцелевые ноутбуки затрудняют отслеживание зависимостей. Во-вторых, даже если ваши журналы будут отправляться на платформу ведения журналов GCP (Stackdriver), они, вероятно, представляют собой неструктурированный вывод ячеек. Это затрудняет мониторинг трубопровода и реагирование на сбои. Поэтому планируйте перенос зрелого кода и моделей из записных книжек в отдельные компоненты конвейера, каждый из которых является контейнером.Это то, что я показал вам в Часть 1 .

Другими словами, используйте Deep Learning VM для небольших команд, компоненты Jupyter для экспериментальной работы и контейнерные операции для зрелых моделей

.