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

TensorFlow, почему python выбрал язык?

Недавно я начал изучать глубокое обучение и другие методы ML, и я начал искать рамки, которые упрощают процесс сборки сети и обучают ее, после чего я нашел TensorFlow, имея небольшой опыт в этой области, для меня, кажется, что скорость - большой фактор для создания большой системы ML еще больше, если вы работаете с глубоким обучением, поэтому почему Python был выбран Google для создания TensorFlow? Разве было бы лучше сделать это над языком, который может быть скомпилирован и не интерпретирован?

В чем преимущества использования Python над языком С++ для машинного обучения?

4b9b3361

Ответ 1

Самое важное, что нужно знать о TensorFlow, это то, что ядро ​​не написано на Python: оно написано в комбинации высоко оптимизированных С++ и CUDA (язык Nvidia для программирования графических процессоров). Большая часть этого происходит, в свою очередь, с помощью Eigen (высокопроизводительная цифровая библиотека С++ и CUDA) и NVidia cuDNN (очень оптимизированная библиотека DNN для графических процессоров NVidia для таких функций, как свертки).

Модель TensorFlow заключается в том, что программист использует "некоторый язык" (скорее всего, Python!), чтобы выразить модель. Эта модель, написанная в конструкциях TensorFlow, таких как:

h1 = tf.nn.relu(tf.matmul(l1, W1) + b1)
h2 = ...

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

Затем программист "управляет" выполнением этой модели, потянув за узлы - для обучения, обычно в Python, и для обслуживания, иногда в Python, а иногда и в необработанном С++:

sess.run(eval_results)

Этот один Python (или вызов функции С++) использует либо внутрипроцессный вызов на С++, либо RPC для распределенной версии для вызова сервер С++ TensorFlow, чтобы сообщить ему выполнить, а затем скопировать результаты.

Итак, с учетом сказанного, повторите фразу: почему TensorFlow выбрал Python в качестве первого хорошо поддерживаемого языка для выражения и управления подготовкой моделей?

Ответ на этот вопрос прост: Python - это, пожалуй, самый удобный язык для широкого круга ученых по данным и экспертов по компьютерному обучению, которые также легко интегрируются и контролируют бэкэнд С++, а также являются общими, широко используемыми как внутри и снаружи Google и с открытым исходным кодом. Учитывая, что с базовой моделью TensorFlow производительность Python не так важна, она была естественной. Это также огромный плюс, что NumPy упрощает предварительную обработку в Python - также с высокой производительностью - перед подачей в для TensorFlow для действительно тяжелых процессоров.

Также существует куча сложности в выражении модели, которая не используется при ее выполнении - формировать вывод (например, если вы выполняете matmul (A, B), какова форма полученных данных?) и автоматически gradient. Оказалось, было приятно иметь возможность выразить их в Python, хотя я думаю, что в долгосрочной перспективе они, вероятно, перейдут на сервер С++, чтобы упростить добавление других языков.

(Надеюсь, конечно, поддерживать другие языки в будущем для создания и выражения моделей. Уже довольно просто выполнить вывод с использованием нескольких других языков - теперь работает С++, кто-то из Facebook внесла вклад Go, которые мы сейчас просматриваем, и т.д.)

Ответ 2

TF не написан на питоне. Он написан на С++ (и использует высокопроизводительные цифровые библиотеки и CUDA), и вы можете проверить это, посмотрев на их github. Итак, ядро ​​написано не в python, но TF предоставляет интерфейс для многих других языков (python, С++, Java, Go)

введите описание изображения здесь

Если вы пришли из мира анализа данных, вы можете думать об этом как numpy (не написано на python, но предоставляет интерфейс для Python), или если вы являетесь веб-разработчиком - подумайте об этом как о базе данных (PostgreSQL, MySQL, который можно вызвать из Java, Python, PHP)


Интерфейс Python (язык, на котором люди пишут модели в TF) является самым популярным из-за many причины. На мой взгляд, основная причина историческая: большинство пользователей ML уже используют ее (другой популярный выбор - R), поэтому, если вы не предоставите интерфейс для python, ваша библиотека, скорее всего, обречена на безвестность.


Но запись в python не означает, что ваша модель выполняется в python. Напротив, если вы правильно написали свою модель, Python никогда не выполняется во время оценки графика TF (кроме tf.py_func(), который существует для отладки и его следует избегать в реальной модели именно потому, что он выполняется на стороне Python).

Это отличается от, например, numpy. Например, если вы выполняете np.linalg.eig(np.matmul(A, np.transpose(A)) (который является eig(AA')), операция будет вычислять транспонирование на некотором быстром языке (С++ или fortran), вернуть его на python, взять его из python вместе с A и вычислить умножение в некоторых быстрый язык и вернуть его на python, затем вычислить собственные значения и вернуть его на python. Таким образом, несмотря на то, что дорогостоящие операции, такие как matmul и eig, вычисляются эффективно, вы все равно теряете время, перемещая результаты на python назад и усиливая. TF не делает это, как только вы определили график, в котором ваши тензоры текут не в python, а в С++/CUDA/что-то еще.

Ответ 3

Python позволяет создавать модули расширения с использованием C и С++, взаимодействуя с собственным кодом и все еще получая преимущества, которые дает Python.

TensorFlow использует Python, да, но он также содержит большие количества С++.

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

Ответ 4

Последнее соотношение, которое вы можете проверить здесь, показывает, что внутри TensorFlow C++ занимает ~ 50% кода, а Python занимает ~ 40% кода.

И C++, и Python являются официальными языками в Google, поэтому неудивительно, почему это так. Если бы мне пришлось бы обеспечить быструю регрессию, где присутствуют C++ и Python...

C++ находится внутри вычислительной алгебры, а Python используется для всего остального, в том числе для тестирования. Зная, насколько повсеместно тестируется сегодня, неудивительно, почему код Python вносит свой вклад в TF.