问题标签 [tpu]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
tensorflow - BERT 如何利用 TPU 内存?
Google 的 BERT repo 中的README说,即使是长度为 512 的单个句子也不能放在 BERT-Large 模型的 12 GB Titan X 中。
但在 BERT 论文中,它说使用 64 个 TPU 芯片来训练 BERT-Large,最大长度为 512,批量大小为 256。它们如何将大于 256 倍的批量放入仅增加 171 倍的内存中?
从另一个角度来看,我们可以在每个样本的内存使用情况下比较这两种配置:
- TPU:假设TPUv3用于预训练,总TPU内存为32GB/芯片*64芯片=2048GB。根据论文,256 的批量大小和最大长度 512 在此配置中运行良好,这意味着8 GB 内存能够容纳单个样本。此外,如果使用 GPUv2,每个样本的内存使用量将减少到仅 4 GB。
- GPU:12 GB Titan X 甚至无法容纳长度为 512 的单个样本。
为什么 GPU 上的内存消耗要大得多?这是否意味着 TPU 上的内存消耗比 GPU 上的优化方式更好?
tensorflow - 是否可以在不使用 Estimator API 的情况下在 TPU 上运行 python tensorflow 代码?
我已经花了数周时间尝试编写可以直接与 TPU 通信的 Python 级别的 Tensorflow 代码。如果没有 Estimator API,如何实现可以在 TPU 上运行的系统?
我试过的资源:
- https://www.tensorflow.org上有关 Estimator API、TPU 的所有文档
我试过的方法:
初始化一个 TPUClusterResolver 并将其作为 tf.Session() 的参数传递,它只是挂起而不执行 session.run()
还尝试了 sess.run(tpu.initialize_system()) 它也卡住了
尝试在那里查看 TPUEstimator API
我在 Estimator API 实现中遇到的问题:
- 我有一个基于策略梯度的强化学习代码,其中包含一个神经网络
- 我在执行期间有两个 session.run() 。一个在剧集中的每一步都运行。另一个在剧集结束时运行
- tf.train.SessionRunHook 不适合我的代码
tensorflow - 在 GKE 上使用 TPU:从馈电记录的错误:套接字已关闭
有时,我们使用 TPU 的基于 GKE TPUEstimator 的训练作业会失败,原因如下:
我对此有两个问题:
- 这里发生了什么?我检查了 pod 的内存使用情况,但没有达到峰值。分配给 pod 的 TPU 也仍然存在。
- 作业并不总是向 pod 提出错误。它继续显示为正在运行,除非有人手动检查状态然后采取措施重新启动它。有什么办法让它总是自动重启?
python - 如何在 Tensorflow 中有效地加入来自 TFRecords 的数据
TFRecord
在s上训练 TensorFlow 模型时,我需要有效地加入少量数据。如何使用已解析的信息进行此查找TFRecord
?
更多细节:
我正在使用TFRecords
. 每个都TFRecord
包含原始图像以及目标标签,以及有关图像的一些元数据。训练的一部分是我需要使用特定于一组图像的mean
和标准化图像。std
过去为了做到这一点,我将mean
and硬编码std
到TFRecord
. 然后在 myparse_example
中使用它来映射Dataset
my 中的input_fn
,如下所示:
虽然上述方法有效并且可以缩短训练时间,但它的局限性在于我经常想改变我使用的mean
东西。我宁愿在训练时查找适当的汇总统计数据,std
而不是将mean
andstd
写入s。TFRecord
这意味着当我训练时,我有一个小的 Python 字典,我可以使用从TFRecord
. 我遇到的问题是我似乎无法在我的张量流图中使用这个 python 字典。如果我尝试直接进行查找,它不起作用,因为我有张量对象而不是实际的原语。这是有道理的input_fn
正在为 TensorFlow 构建计算图的符号操作(对吗?)。我该如何解决这个问题?
我尝试过的一件事是从字典中创建一个查找表,如下所示:
可以在parse_example
函数中创建和使用哈希表来进行查找。这一切都“有效”,但它极大地减慢了训练速度。值得注意的是,这种培训是在 TPU 上进行的。使用来自TFRecord
s 的值的原始方法,训练速度非常快,并且不受 IO 的限制,但是当使用哈希查找时,这种情况会发生变化。处理这些情况的建议方法是什么?虽然重新打包TFRecord
s 是可行的,但当要查找的数据很小并且可以提高效率时,这似乎很愚蠢。
python - 无法编译 tensorflow lite 文件以在珊瑚 tpu 上工作
我试图获得重复简单的模型来编译,以便它可以在珊瑚 tpu 上运行。到目前为止,我已经冻结并将文件转换为 tflite 文件,但是当我通过 Edge TPU 模型编译器运行文件时,它给了我一个相对无用的错误消息。
我给他们发了电子邮件,他们说使用 /tensorflow/lite/tools:visualize 来查看模型有什么问题。(我也很难让它工作,但似乎我应该问一个单独的问题来获得有关 bazel 的帮助)
我已经按照这个站点对模型进行了量化感知训练,并且我已经使用随机输入运行了 tflite 文件,它似乎可以工作。我担心 TPU 模型编译器的部分问题是我在代理后面,所以我通过它运行其他人的文件并成功编译。)
这是评估图:
然后我冻结了这个:
然后用这个转换:
我只是想让这个文件编译它不必是完美的或任何东西。
感谢您的帮助。
编辑:
我已经尝试了两件事,第一件事是我从 tflite 文件中打印出张量(我试图使用 Visualize.py 工具,但我在代理后面并且在让它工作时遇到了很多麻烦。)我得到了这个:
我认为问题在于 MatMul_bias 张量没有被转换为 uint8(珊瑚 tpu 需要)。
我不知道如何解决这个问题。
我尝试的另一个改变是使用 tensorflow slim.fully_connected,而不是我自己的自定义全连接神经网络。(虽然他们有同样的问题。)
python-3.x - 带有输入形状的“strided_slice_19”(操作:“StridedSlice”)
我尝试在 TPU 上使用 keras.preprocessing.image.ImageDataGenerator,但我从第一个 epoch 收到此错误。相同的代码可用于 jupyter notebook,但需要数小时进行训练。
我的模型:
优化器
将 Keras 转换为 TPU
图像数据生成器
模型拟合
我收到这个错误
时代 1/50 15/33 [============>.......] - ETA:8s - 损失:4.7722 - acc: 0.0083INFO:tensorflow:新的输入形状;(重新)编译: mode=train (# of cores 8), [TensorSpec(shape=(0,), dtype=tf.int32, name='core_id_60'), TensorSpec(shape=(0, 128, 128, 3), dtype=tf.float32, name='conv2d_3_input_20'), TensorSpec(shape=(0, 120), dtype=tf.float32, name='activation_13_target_30')] ----------- -------------------------------------------------- -------------- InvalidArgumentError Traceback (最近一次调用最后一次) /usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/ops.py in _create_c_op(graph ,node_def,inputs,control_inputs)1658
尝试:-> 1659 c_op = c_api.TF_FinishOperation(op_desc)1660除了errors.InvalidArgumentError作为e:InvalidArgumentError:维度 0 的切片索引 0 超出范围。对于“strided_slice_19”(操作:“StridedSlice”),输入形状:[0]、[1]、[1]、[1] 和计算输入张量:输入[1] = <0>、输入[2] = <1>,输入[3] = <1>。
在处理上述异常的过程中,又出现了一个异常:
ValueError Traceback(最近一次调用最后一次)17 帧 /usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/ops.py 在_create_c_op(graph,node_def,inputs,control_inputs)1660
除了errors.InvalidArgumentError as e: 1661 # 转换为 ValueError 以实现向后兼容性。-> 1662 引发 ValueError(str(e)) 1663 1664 返回 c_opValueError:维度 0 的切片索引 0 超出范围。对于“strided_slice_19”(操作:“StridedSlice”),输入形状:[0]、[1]、[1]、[1] 和计算输入张量:输入[1] = <0>、输入[2] = <1>,输入[3] = <1>。
tensorflow - Error while using Tensorflow-Hub and Colab TPU
I am trying to use BERT for text classification using Tensorflow hub. The code runs fine on Colab GPU but when I converted it for Colab TPU it shows up the following 'uninitialized layer' error. Following is the Bert Layer-
Following is my model -
And follwing is the Error-
Please help me resolve this error.
google-compute-engine - 形状不能沿维度 0 分片 8 次
我试图在计算引擎和谷歌云 TPU 上运行自定义估算器,但是我收到一个错误:
我不知道是什么原因或如何解决它 - 任何想法?
安迪·P。
tensorflow - 是否有任何解决方法可以在 TPU 上使用多个“正确”指标进行 keras 学习?
我在 Google colaboratory 上使用 Keras 制作了小型模型。当我在 TPU 上运行学习时,我看到了错误的指标。
当然,当我在 CPU/GPU 上运行学习时,m1 和 m2 指标显示正确的数字。(见下面的代码)
但是在我将运行时类型更改为 TPU 后,m1 和 m2 不正确,看起来像是这些值的平均值。
[CPU/GPU的结果]
[TPU的结果]
很明显CPU/GPU的结果是正确的。为什么会这样?有什么解决方法吗?
- 如果我只使用一个指标(如 [m1]),则该值是正确的。
python - 是否可以在 Google TPU 上运行常规 python 代码?
所以我对谷歌 TPU 很陌生。根据我已经研究过的内容,它专门针对训练在 TensorFlow 上编写的机器学习模型进行了优化。目前,我正在尝试了解 TPU 如何与其他类型的功能一起执行。这些功能与机器学习无关。我一直在尝试调整我的代码,以便它可以在 Google Colab 的 TPU 上运行,但我不确定它是否有效,或者这是否是最好的方法。这是我用于矩阵乘法算法的代码:O(n3)
我担心这不是在 TPU 上运行的。调用时,session.list_devices()
我看到列出了一个 CPU,我担心我的代码实际上可能在 CPU 上而不是 TPU 上运行。这是所述命令的输出:
目前,我不是在寻找关于使用什么加速器的建议。我想测试 TPU 并确保我的代码在其上运行。请帮忙!