text:
Buid failed in redhat system..

ERROR: /root/.cache/bazel/_bazel_daixiangzi/7c0ccbbd924a8f891a09b57c04646026/external/boringssl/BUILD:130:1: C++ compilation of rule '@boringssl//:crypto' failed (Exit 1)
gcc: error trying to exec 'cc1': execvp: No such file or directory
Target //tensorflow/tools/graph_transforms:transform_graph failed to build
INFO: Elapsed time: 29.467s, Critical Path: 4.82s
INFO: 9 processes: 9 local.
FAILED: Build did NOT complete successfully
Gcc and g++ version is 4.8.5
NO CUDA

tensorflow version is master

i run  bazel build --config=opt tensorflow/tools/graph_transforms:transform_graph --verbose_failures

bazel version is 1.2.1

Could you  provide the exact sequence of commands / steps that you executed before running into the problem, also please check this link if it helps.

@daixiangzi Could you provide the exact sequence of commands / steps that you executed before running into the problem, also please check this link if it helps.

1.git clone https://github.com/tensorflow/tensorflow.git
2 cd tensorflow
3 ./configure
Please specify the location of python. [Default is /usr/bin/python]:
Found possible Python library paths:
/usr/lib/python2.7/site-packages
/usr/lib64/python2.7/site-packages
Please input the desired Python library path to use.  Default is [/usr/lib/python2.7/site-packages]
Do you wish to build TensorFlow with XLA JIT support? [Y/n]: n
No XLA JIT support will be enabled for TensorFlow.
Do you wish to build TensorFlow with OpenCL SYCL support? [y/N]: n
No OpenCL SYCL support will be enabled for TensorFlow.
Do you wish to build TensorFlow with ROCm support? [y/N]: n
No ROCm support will be enabled for TensorFlow.
Do you wish to build TensorFlow with CUDA support? [y/N]: n
No CUDA support will be enabled for TensorFlow.
Do you wish to download a fresh release of clang? (Experimental) [y/N]: n
Clang will not be downloaded.
Please specify optimization flags to use during compilation when bazel option "--config=opt" is specified [Default is -march=native -Wno-sign-compare]:
Would you like to interactively configure ./WORKSPACE for Android builds? [y/N]: n
Not configuring the WORKSPACE for Android builds.
Preconfigured Bazel build configs. You can use any of the below by adding "--config=<>" to your build command. See .bazelrc for more details.
--config=mkl            # Build with MKL support.
--config=monolithic     # Config for mostly static monolithic build.
--config=ngraph         # Build with Intel nGraph support.
--config=numa           # Build with NUMA support.
--config=dynamic_kernels        # (Experimental) Build kernels into separate shared objects.
--config=v2             # Build TensorFlow 2.x instead of 1.x.
Preconfigured Bazel build configs to DISABLE default on features:
--config=noaws          # Disable AWS S3 filesystem support.
--config=nogcp          # Disable GCP support.
--config=nohdfs         # Disable HDFS support.
--config=nonccl         # Disable NVIDIA NCCL support.
Configuration finished
4.bazel build --config=opt tensorflow/tools/graph_transforms:transform_graph --verbose_failures
ERROR:
WARNING: /home/daixiangzi/github/tensorflow/tensorflow/core/BUILD:1973:1: in srcs attribute of cc_library rule //tensorflow/core:gif_internal: please do not import '//tensorflow/core/platform:gif.h' directly. You should either move the file to this package or depend on an appropriate rule there. Since this rule was created by the macro 'cc_library', the error might have been caused by the macro implementation
INFO: Analyzed target //tensorflow/tools/graph_transforms:transform_graph (155 packages loaded, 10240 targets configured).
INFO: Found 1 target...
INFO: Deleting stale sandbox base /root/.cache/bazel/_bazel_daixiangzi/7c0ccbbd924a8f891a09b57c04646026/sandbox
ERROR: /root/.cache/bazel/_bazel_daixiangzi/7c0ccbbd924a8f891a09b57c04646026/external/boringssl/BUILD:130:1: C++ compilation of rule '@boringssl//:crypto' failed (Exit 1)
gcc: error trying to exec 'cc1': execvp: No such file or directory
Target //tensorflow/tools/graph_transforms:transform_graph failed to build
INFO: Elapsed time: 47.152s, Critical Path: 4.85s
INFO: 9 processes: 9 local.

@daixiangzi Could you provide the exact sequence of commands / steps that you executed before running into the problem, also please check this link if it helps.

1.git clone https://github.com/tensorflow/tensorflow.git
2 cd tensorflow
3 ./configure
Please specify the location of python. [Default is /usr/bin/python]:
Found possible Python library paths:
/usr/lib/python2.7/site-packages
/usr/lib64/python2.7/site-packages
Please input the desired Python library path to use. Default is [/usr/lib/python2.7/site-packages]
Do you wish to build TensorFlow with XLA JIT support? [Y/n]: n
No XLA JIT support will be enabled for TensorFlow.
Do you wish to build TensorFlow with OpenCL SYCL support? [y/N]: n
No OpenCL SYCL support will be enabled for TensorFlow.
Do you wish to build TensorFlow with ROCm support? [y/N]: n
No ROCm support will be enabled for TensorFlow.
Do you wish to build TensorFlow with CUDA support? [y/N]: n
No CUDA support will be enabled for TensorFlow.
Do you wish to download a fresh release of clang? (Experimental) [y/N]: n
Clang will not be downloaded.
Please specify optimization flags to use during compilation when bazel option "--config=opt" is specified [Default is -march=native -Wno-sign-compare]:
Would you like to interactively configure ./WORKSPACE for Android builds? [y/N]: n
Not configuring the WORKSPACE for Android builds.
Preconfigured Bazel build configs. You can use any of the below by adding "--config=<>" to your build command. See .bazelrc for more details.
--config=mkl # Build with MKL support.
--config=monolithic # Config for mostly static monolithic build.
--config=ngraph # Build with Intel nGraph support.
--config=numa # Build with NUMA support.
--config=dynamic_kernels # (Experimental) Build kernels into separate shared objects.
--config=v2 # Build TensorFlow 2.x instead of 1.x.
Preconfigured Bazel build configs to DISABLE default on features:
--config=noaws # Disable AWS S3 filesystem support.
--config=nogcp # Disable GCP support.
--config=nohdfs # Disable HDFS support.
--config=nonccl # Disable NVIDIA NCCL support.
Configuration finished
4.bazel build --config=opt tensorflow/tools/graph_transforms:transform_graph --verbose_failures
ERROR:
WARNING: /home/daixiangzi/github/tensorflow/tensorflow/core/BUILD:1973:1: in srcs attribute of cc_library rule //tensorflow/core:gif_internal: please do not import '//tensorflow/core/platform:gif.h' directly. You should either move the file to this package or depend on an appropriate rule there. Since this rule was created by the macro 'cc_library', the error might have been caused by the macro implementation
INFO: Analyzed target //tensorflow/tools/graph_transforms:transform_graph (155 packages loaded, 10240 targets configured).
INFO: Found 1 target...
INFO: Deleting stale sandbox base /root/.cache/bazel/_bazel_daixiangzi/7c0ccbbd924a8f891a09b57c04646026/sandbox
ERROR: /root/.cache/bazel/_bazel_daixiangzi/7c0ccbbd924a8f891a09b57c04646026/external/boringssl/BUILD:130:1: C++ compilation of rule '@boringssl//:crypto' failed (Exit 1)
gcc: error trying to exec 'cc1': execvp: No such file or directory
Target //tensorflow/tools/graph_transforms:transform_graph failed to build
INFO: Elapsed time: 47.152s, Critical Path: 4.85s
INFO: 9 processes: 9 local.

and then i run sudo find / -name "cc1",no find

@daixiangzi  Please share the GCC version used.

@daixiangzi Please share the GCC and tensorflow version used.

GCC version is 4.8.5

@daixiangzi Please share the GCC and tensorflow version used.

tensorflow version is master

@daixiangzi  you please try with "GCC 7.3.1" and let us know if it helps.

OK，thinks
---Original---
From: "Saduf2019"<notifications@github.com>
Date: Tue, Feb 11, 2020 19:13 PM
To: "tensorflow/tensorflow"<tensorflow@noreply.github.com>;
Cc: "Mention"<mention@noreply.github.com>;"daixiangzi"<543826458@qq.com>;
Subject: Re: [tensorflow/tensorflow] Buid failed in redhat system.. (#36611)
@daixiangzi  you please try with "GCC 7.3.1" and let us know if it helps.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub, or unsubscribe.

@daixiangzi Please confirm if the above comment helps and your issue is resolved.

@daixiangzi Please confirm if the above comment helps and your issue is resolved.

i also meet new problem :
ERROR: /home/github/tensorflow_source/tensorflow/core/lib/monitoring/BUILD:191:1: C++ compilation of rule '//tensorflow/core/lib/monitoring:percentile_sampler' failed (Exit 1) gcc failed: error executing command /usr/bin/gcc -U_FORTIFY_SOURCE -fstack-protector -Wall -Wunused-but-set-parameter -Wno-free-nonheap-object -fno-omit-frame-pointer '-std=c++0x' -MD -MF ... (remaining 73 argument(s) skipped)

@daixiangzi Please confirm if the above comment helps and your issue is resolved.

i also meet new problem :
ERROR: /home/github/tensorflow_source/tensorflow/core/lib/monitoring/BUILD:191:1: C++ compilation of rule '//tensorflow/core/lib/monitoring:percentile_sampler' failed (Exit 1) gcc failed: error executing command /usr/bin/gcc -U_FORTIFY_SOURCE -fstack-protector -Wall -Wunused-but-set-parameter -Wno-free-nonheap-object -fno-omit-frame-pointer '-std=c++0x' -MD -MF ... (remaining 73 argument(s) skipped)

@daixiangzi Hi. I meet the same problem:
external/org_tensorflow/tensorflow/core/lib/monitoring/BUILD:176:1: C++ compilation of rule '@org_tensorflow//tensorflow/core/lib/monitoring:percentile_sampler' failed (Exit 1) gcc failed: error executing command /usr/bin/gcc -U_FORTIFY_SOURCE -fstack-protector -Wall -Wunused-but-set-parameter -Wno-free-nonheap-object -fno-omit-frame-pointer -g0 -O2 '-D_FORTIFY_SOURCE=1' -DNDEBUG -ffunction-sections ... (remaining 80 argument(s) skipped)
Did you solve it?
For me: bazel-2.0.0, gcc-7.5.0, TF2.2.0
Any help will be appreciated. thanks!

Also, just hit the same problem with same config as @cxyanhk - anybody been able to solve it?

I also meet this issue  @cxyanhk and I'm using Ubuntu-18.05, gcc-7.5.0, bazel-2.0.0, TF2.2.0. Anyone can help?

@daixiangzi,
We are checking to see if you still need help on this issue. You can try building the latest stable version of TF i.e 2.6 using this guide and make sure to use this link to know about tested build configurations. Thanks!


text:
whether is it better to add class_weight to validation dataset or not?

Please make sure that this is a feature request. As per our GitHub Policy, we only address code/doc bugs, performance issues, feature requests and build/installation issues on GitHub. tag:feature_template
System information

TensorFlow version (you are using): 2.x
Are you willing to contribute it (Yes/No): Yes

Describe the feature and the current behavior/state.
set class_weight to validation dataset
It is common for us to set class_weight to something like inverse of class supports  to Model.fit() when dealing with imbalance classification problems. And as the code implemented in tensorflow.python.keras.engine.data_adapter._make_class_weight_map_fn, class_weight will eventually be converted to sample_weight.
However, the current implementation of Model.fit() only add class_weight to the training dataset but not to the validation dataset
# for training dataset
data_handler = data_adapter.DataHandler(
  x=x,
  y=y,
  sample_weight=sample_weight,
  batch_size=batch_size,
  steps_per_epoch=steps_per_epoch,
  initial_epoch=initial_epoch,
  epochs=epochs,
  shuffle=shuffle,
  class_weight=class_weight,
  max_queue_size=max_queue_size,
  workers=workers,
  use_multiprocessing=use_multiprocessing,
  model=self,
  steps_per_execution=self._steps_per_execution)

# for validation dataset
self._eval_data_handler = data_adapter.DataHandler(
    x=val_x,
    y=val_y,
    sample_weight=val_sample_weight,
    batch_size=validation_batch_size or batch_size,
    steps_per_epoch=validation_steps,
    initial_epoch=0,
    epochs=1,
    max_queue_size=max_queue_size,
    workers=workers,
    use_multiprocessing=use_multiprocessing,
    model=self,
    steps_per_execution=self._steps_per_execution)

which will output training loss and validation loss with (maybe) large gap, such as:
Epoch 2/10000
128/128 [==============================] - 63s 489ms/step - loss: 379.6439 - acc: 0.0073 - acc_f1: 0.0077 - cm: 10485.7598 - val_loss: 4.9299 - val_acc: 0.0076 - val_acc_f1: 0.0081 - val_cm: 2621.4399
128/128 [==============================] - 63s 492ms/step - loss: 374.9651 - acc: 0.0078 - acc_f1: 0.0099 - cm: 10485.7598 - val_loss: 4.8990 - val_acc: 0.0078 - val_acc_f1: 0.0120 - val_cm: 2621.4399

I am wondering whether it is a good practice to add the same class_weight parameter to the training dataset and the validation dataset, in order to keep training loss and validation loss with the same scale.
normalized loss by the sum of sample_weight
And by the way, while reducing the loss by the size of a batch, the current loss is normalized by the size of weighted_loss (ref. to tensorflow.python.keras.utils.losses_utils.reduce_weighted_loss),  whether is it better to normalize the loss by the sum of sample_weight?
Will this change the current api? How?
Almost no changes.
For adding class_weight to validation dataset, only add class_weight=class_weight when calling data_adapter.DataHandler
self._eval_data_handler = data_adapter.DataHandler(
    x=val_x,
    y=val_y,
    sample_weight=val_sample_weight,
    batch_size=validation_batch_size or batch_size,
    steps_per_epoch=validation_steps,
    initial_epoch=0,
    epochs=1,
    shuffle=shuffle,
    class_weight=class_weight,
    max_queue_size=max_queue_size,
    workers=workers,
    use_multiprocessing=use_multiprocessing,
    model=self,
    steps_per_execution=self._steps_per_execution)

For normalizing loss with the sum of sample_weight,  only changes the code snippet of python.keras.utils.losses_utils.compute_weighted_loss
from
    ....
    # Apply reduction function to the individual weighted losses.
    loss = reduce_weighted_loss(weighted_losses, reduction)
    # Convert the result back to the input type.
    loss = math_ops.cast(loss, input_dtype)
    return loss

to

    if sample_weight is None:
      sample_weight = array_ops.ones_like(losses, dtype=losses.dtype)
   ...
    # Apply reduction function to the individual weighted losses
    if reduction == ReductionV2.NONE:
      loss = weighted_losses
    else:
      loss = math_ops.reduce_sum(weighted_losses)
      if reduction == ReductionV2.SUM_OVER_BATCH_SIZE:
        loss = _safe_mean(loss, math_ops.reduce_sum(sample_weight))

    # Convert the result back to the input type.
    loss = math_ops.cast(loss, input_dtype)
    return loss

Who will benefit with this feature?
everyone if it is a good practice.
Any Other info.

You are not supposed to apply weights to your validation set since it is supposed to measure your model's performance. If you'll do that you'll probably get better results for validation but once your model is deployed it will perform worse on new data. Weighting, resampling techniques etc. - they all should be done on the training set only!

thanks, @gowthamkpr. You are right, the loss gap is not that important, and we should keep our eyes on the performance on new data.

source: gharchive/issue

authors: gowthamkpr loveychen

repo: tensorflow/tensorflow

license_type: permissive

license_source: github-api


text:
TypeError: The value of a feed cannot be a tf.Tensor object

Hi, thanks before you see it.
I got an error when i run tensorflow model of cnn.
TypeError: The value of a feed cannot be a tf.Tensor object. Acceptable feed values include Python scalars, strings, lists, or numpy ndarrays.
This error tell me that I cant feed tensor,but i dont know how to modify my code .Any one can tell me how can i modify my code ?
Here is my code.
https://github.com/xuhuapeng/cifar/blob/master/cnn_1.py
https://github.com/xuhuapeng/cifar
Thanks very much.

Once you have launched a sess, you can use your_tensor.eval(session=sess) or sess.run(your_tensor) to get you feed tensor into the format of numpy.array and then feed it to your placeholder.

@zakizhou
I have change the code to :
 sess.run(train_step,feed_dict={x: images, y_: labels, keep_prob: 0.5})
But it give the same error as I pointed out before.
Also I had tried to  change the code to
sess.run(train_step,feed_dict={x: images.eval(), y_: labels.eval(),keep_prob:0.5}).
But this will lead the program to execute forever. In my point the images.eval() step can't done forever.
Can you see my code to give me some another advice ?? Thank you so much.

@xuhuapeng
The cnn_1.py in your git repo is modified from the original file in the official tutorial of  TF right?  If you have a close look at its original code, you will find no placeholders in it which means the input of the model is the second way(readings from files not feeding) according to  this, as a result, you can't feed any data to this model.
Since cifar10 is not a small dataset like mnist, placeholder is not suitable for this kind of large datasets, personally I think  readding inputs from files is the best way to train it. If you still want to use placeholder  you'd better write a next_batch method in mnist for cifar so as to feed the placeholder

yeah.I will try you suggestion.
One more question,please be patient with me. Why  I modify my code to  sess.run(train_step,feed_dict={x: images.eval(), y_: labels.eval(),keep_prob:0.5}). the program won't be stop? Doing the .eval() operation forever?

see this Creating threads to prefetch using QueueRunner objects section.
You delete the  tf.train.start_queue_runners ,coord and theads  from the training code which will start the input queue that the reader  need to read from, so you reader will hang there until the queue starts.

Thanks very much.
I had saw the link you  gave me, but there are lots thing I can't understand due to my poor English,. Maybe I should see it again.  👍 @zakizhou

You are welcome,byt,咱们中国人还是用中文交流比较好> < @xuhuapeng

Thanks @zakizhou for helping to resolve this problem for @xuhuapeng. If you have questions in the future, we recommend Stack Overflow for community support. We try to keep this issue tracker focused on bugs and feature requests.

@zakizhou 你好，我也遇到了相似的问题，系统刚开始和我说，输入必须是一个tensor，另一方面系统又和我说，feed不能是tensor，能不能麻烦大神帮我看一下，代码并不复杂。感谢
https://github.com/RayAnteku/tensorflow

@zakizhou 你好，根据你上边的回答我对我的程序做了修改，但程序还是一直阻塞，能办忙看一下代码吗，不胜感激，你github上的邮箱发不过去邮件，我的邮箱1107404430@qq.com。https://github.com/Tony-Hou/Img_classification.git

@RayAnteku , Do you solve this problem? I have the same error with you . If you did,please telll me how.

authors: RayAnteku Tony-Hou jart lily0101 xuhuapeng zakizhou


text:
Variables don't sync properly between 2 GPUs when SLI is enabled on Windows

System information

Have I written custom code (as opposed to using a stock example script provided in TensorFlow): no
OS Platform and Distribution (e.g., Linux Ubuntu 16.04): Windows-10-10.0.19041-SP0
Mobile device (e.g. iPhone 8, Pixel 2, Samsung Galaxy) if the issue happens on mobile device:
TensorFlow installed from (source or binary): binary (pip)
TensorFlow version (use command below): v2.7.0-rc1-69-gc256c071bb2 2.7.0
Python version: 3.7.9
Bazel version (if compiling from source):
GCC/Compiler version (if compiling from source):
CUDA/cuDNN version:  11.2 / 8.1.0
GPU model and memory: 2 x NVIDIA GeForce GTX 980 with SLI ON. 4GB memory

Describe the current behavior
When SLI is on variables don't sync properly between the 2 GPUs. I first noticed by getting nan loss values, but this simple code fails:
v = tf.Variable(1.0)
with tf.device('/gpu:1'):
    print(v)

Output:
2021-11-17 03:03:58.146222: I tensorflow/core/platform/cpu_feature_guard.cc:151] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations:  AVX AVX2
To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.
2021-11-17 03:03:58.788548: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1525] Created device /job:localhost/replica:0/task:0/device:GPU:0 with 2691 MB memory:  -> device: 0, name: NVIDIA GeForce GTX 980, pci bus id: 0000:01:00.0, compute capability: 5.2
2021-11-17 03:03:58.791426: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1525] Created device /job:localhost/replica:0/task:0/device:GPU:1 with 2691 MB memory:  -> device: 1, name: NVIDIA GeForce GTX 980, pci bus id: 0000:02:00.0, compute capability: 5.2
<tf.Variable 'Variable:0' shape=() dtype=float32, numpy=0.0>

Note that turning SLI off makes the issue disappear, but also the model runs slower.
Describe the expected behavior
Variables should have the same value regardless of the device.
In the example above, with SLI disabled, the variable has the correct value (1):
2021-11-17 03:16:47.448047: I tensorflow/core/platform/cpu_feature_guard.cc:151] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations:  AVX AVX2
To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.
2021-11-17 03:16:48.068154: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1525] Created device /job:localhost/replica:0/task:0/device:GPU:0 with 2777 MB memory:  -> device: 0, name: NVIDIA GeForce GTX 980, pci bus id: 0000:01:00.0, compute capability: 5.2
2021-11-17 03:16:48.069778: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1525] Created device /job:localhost/replica:0/task:0/device:GPU:1 with 2777 MB memory:  -> device: 1, name: NVIDIA GeForce GTX 980, pci bus id: 0000:02:00.0, compute capability: 5.2
<tf.Variable 'Variable:0' shape=() dtype=float32, numpy=1.0>

Contributing

Do you want to contribute a PR? (yes/no):
Briefly describe your candidate solution(if contributing):

Standalone code to reproduce the issue
Provide a reproducible test case that is the bare minimum necessary to generate
the problem. If possible, please share a link to Colab/Jupyter/any notebook.
import tensorflow as tf
v = tf.Variable(1.0)
with tf.device('/gpu:1'):
    print(v)

Other info / logs Include any logs or source code that would be helpful to
diagnose the problem. If including tracebacks, please include the full
traceback. Large logs and files should be attached.

@tilakrayal since you tagged this as TF 2.7, I also tested on 2.6 and 2.5 and have the same unintended behavior.
I have some additional GPU info outputted by tensorflow 2.5 which may be helpful:
pciBusID: 0000:01:00.0 name: NVIDIA GeForce GTX 980 computeCapability: 5.2
coreClock: 1.342GHz coreCount: 16 deviceMemorySize: 4.00GiB deviceMemoryBandwidth: 208.91GiB/s
2021-11-17 19:39:18.830701: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1733] Found device 1 with properties:
pciBusID: 0000:02:00.0 name: NVIDIA GeForce GTX 980 computeCapability: 5.2
coreClock: 1.342GHz coreCount: 16 deviceMemorySize: 4.00GiB deviceMemoryBandwidth: 208.91GiB/s
2021-11-17 19:39:18.832395: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1871] Adding visible gpu devices: 0, 1
2021-11-17 19:39:19.479336: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1258] Device interconnect StreamExecutor with strength 1 edge matrix:
2021-11-17 19:39:19.479452: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1264]      0 1
2021-11-17 19:39:19.481625: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1277] 0:   N Y
2021-11-17 19:39:19.482735: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1277] 1:   Y N
2021-11-17 19:39:19.483528: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1418] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 2687 MB memory) -> physical GPU (device: 0, name: NVIDIA GeForce GTX 980, pci bus id: 0000:01:00.0, compute capability: 5.2)
2021-11-17 19:39:19.484916: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1418] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:1 with 2687 MB memory) -> physical GPU (device: 1, name: NVIDIA GeForce GTX 980, pci bus id: 0000:02:00.0, compute capability: 5.2)

@sanatmpa1 ,
I was able to reproduce the issue in tf v2.6, v2.7 and nightly.Please find the gist here.

Additional update:
Turning off Intel VMX Virtualization Technology on the BIOS (Intel i511600K, ASUS Z590 motherboard) makes the issue go away (that means it works properly regardless of having SLI on or off).
Not sure what the interaction between SLI and Intel Virtualization is, other apps that use GPU work properly with SLI regardless of the virtualization mode.

When SLI is on and when you test with first GPU tf.device('/gpu:0') what is the output you're getting.

@sachinprasadhs with tf.device('/gpu:0') it works properly:
v = tf.Variable(1.0)
with tf.device('/gpu:0'):
     print(v)

2021-11-24 18:42:28.808877: I tensorflow/core/platform/cpu_feature_guard.cc:151] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations:  AVX AVX2
To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.
2021-11-24 18:42:29.476401: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1525] Created device /job:localhost/replica:0/task:0/device:GPU:0 with 2691 MB memory:  -> device: 0, name: NVIDIA GeForce GTX 980, pci bus id: 0000:01:00.0, compute capability: 5.2
2021-11-24 18:42:29.479514: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1525] Created device /job:localhost/replica:0/task:0/device:GPU:1 with 2691 MB memory:  -> device: 1, name: NVIDIA GeForce GTX 980, pci bus id: 0000:02:00.0, compute capability: 5.2
<tf.Variable 'Variable:0' shape=() dtype=float32, numpy=1.0>

Explicitly setting the device when initializing the variable also fails when going from 1 GPU to another, but works when staying within the same GPU:
with tf.device('/gpu:0'):
     v = tf.Variable(1.0)
 with tf.device('/gpu:0'):
     print(v)

with tf.device('/gpu:1'):
     v = tf.Variable(1.0)
 with tf.device('/gpu:1'):
     print(v)

In both cases the output is the expected (1). But for
with tf.device('/gpu:0'):
     v = tf.Variable(1.0)
 with tf.device('/gpu:1'):
     print(v)

and
with tf.device('/gpu:1'):
     v = tf.Variable(1.0)
 with tf.device('/gpu:0'):
     print(v)

It prints 0.

Can you try to set the visible devices in the console with set CUDA_VISIBLE_DEVICES=0,1 and try the output.

I tried and the behavior is the same, I get a 0 on the second GPU

Could you please test it against the latest TensorFlow version 2.12, for windows you can either build it from source or install it using WSL2.
Refer: For pip install, to build from source.
Note: WSL2 is supported for Windows 10 19044 or higher.

authors: fedeallocati sachinprasadhs tilakrayal


text:
tf.image.crop_to_bounding_box() assumes tf.int32 arguments, but not documented as such

Issue type
Documentation Feature Request
Have you reproduced the bug with TensorFlow Nightly?
No
Source
binary
TensorFlow version
2.13.0
Custom code
No
OS platform and distribution
Linux Ubuntu 22.04 (WSL 2)
Mobile device
No response
Python version
3.10
Bazel version
No response
GCC/compiler version
No response
CUDA/cuDNN version
No response
GPU model and memory
No response
Current behavior?
tf.image.crop_to_bounding_box() implicitly assumes that the target width and height are tf.int32, but this is not documented anywhere. The cause for this is using tf.shape() which has the default dtype of tf.int32, in a stack operation:
https://github.com/tensorflow/tensorflow/blob/c9fafed9bc8cb0238a775fd4a0680e648c06b5b6/tensorflow/python/ops/image_ops_impl.py#L1250-L1254
Standalone code to reproduce the issue
import tensorflow as tf

image = tf.zeros([1000, 2000, 3], dtype=tf.uint8)
offset = tf.constant([0, 0], dtype=tf.int64)
size = tf.constant([900, 1500], dtype=tf.int64)
tf.image.crop_to_bounding_box(image, offset[0], offset[1], size[0], size[1])

Relevant log output
Traceback (most recent call last):
  File "/.../test.py", line 6, in <module>
    tf.image.crop_to_bounding_box(image, offset[0], offset[1], size[0], size[1])
  File "/.../.venv/lib/python3.10/site-packages/tensorflow/python/util/traceback_utils.py", line 153, in error_handler
    raise e.with_traceback(filtered_tb) from None
  File "/.../.venv/lib/python3.10/site-packages/tensorflow/python/framework/ops.py", line 6656, in raise_from_not_ok_status
    raise core._status_to_exception(e) from None  # pylint: disable=protected-access
tensorflow.python.framework.errors_impl.InvalidArgumentError: cannot compute Pack as input #1(zero-based) was expected to be a int32 tensor but is a int64 tensor [Op:Pack] name: stack

Hi @agkphysics ,
Thanks for reporting this. Yes I have tested the API tf.image.crop_to_bounding_box with all tf.dtypes tf.uint8,tf.uint16,tf.uint32,tf.uint64,tf.int32,tf.int64, tf.float32, tf.float64,tf.bfloat16,tf.float16
Only tf.int32 is acceptable dtype for the arguments offset_height, offset_width, target_height, target_width. This is not documented well.
Also I have tested with Python int and float it's only works with python int but not float.
All the testing can be found in attached gist here.
I may raise a PR for documenting this.
Thanks!

authors: SuryanarayanaY agkphysics


text:
AttributeError: 'module' object has no attribute 'GRUCell'

Hello everyone,
I got the code from tensorflow website for this tutorial. It processed for a long while and got the following errors. Installing tensorflow from sources also did not work for me as it gave me many errors. so I deleted everything installed tensorflow on my Ubuntu 16.04 LTS. Please please help me in resolving these errors as it is an emergency. I am a beginner to tensorflow and its been 2 months already I have been seeing this error
Thanks in advance

Closing this as a duplicate of #8821


text:
Feature Request : Stochastic Depth

Stochastic Depth (aka layer dropout) has been shown to speed up and improve training in ResNets, as well as overall accuracy on testing sets. Essentially, every training step a random subset of residual layers are entirely removed from the network, and training proceeds on the remaining layers. Direct connections are made between the missing layers.
It is described in this paper: https://arxiv.org/pdf/1603.09382.pdf. (Deep Networks with Stochastic Depth by Gao Huang, Yu Sun, Zhuang Liu, Daniel Sedra, Kilian Q. Weinberger)
I can't think of a way to implement this with the python API without reconstructing the model every training iteration, and I'm not familiar the with the C++ API / Cudnn to try to write the op myself.
Of course I'm willing to try any python-only suggestions.
Thanks in advance,
Alex

We currently don't have anybody working on this. It would be great if you could help us by working on this and submitting a PR. Let us know if you need further clarification. Thanks!

It's possibly to do in pure Python. You can "skip" layers in forward prop by using tf.cond to decide which layer is used as an input to given layer.
You can do even more advanced things without leaving Python-land, ie, you can forward prop through some layers, and backprop through a different set of layers.
To skip layers for backprop, the basic trick is to use stop_gradient  to control which implementation is used for backprop run. Here's another example

@yaroslavvb thanks for the tip. Can I post my code back in this thread when I come up with something?

@alexanderalang yes, I think "contributions welcome" means that people are welcome to link to solutions here

So my idea was to create a dropout_layer decorator to stick on helper functions for the basic layer ops. For example I have these functions for resnets
def residual_sub_unit(inputs,weight_shape,bias_shape):
    with tf.name_scope("batch_norm"):
        bn = tf.contrib.layers.batch_norm(inputs)
        tf.summary.histogram("histogram",bn)
    with tf.name_scope("ReLU"):
        ru = tf.nn.relu(bn)
        tf.summary.histogram("histogram",ru)
    with tf.name_scope("Conv3D"):
        with tf.name_scope("weights"):
            W = weight_variable(weight_shape)
            variable_summaries(W)
            tf.add_to_collection(tf.GraphKeys.WEIGHTS, W)
        with tf.name_scope("biases"):
            b = bias_variable(bias_shape)
            variable_summaries(b)
            tf.add_to_collection(tf.GraphKeys.BIASES, b)
        preactivate = tf.nn.conv3d(ru,W,strides=[1,1,1,1,1],padding="SAME") + b
    return preactivate

@dropout_layer
def residual_unit(inputs,weight_shape,bias_shape,layer_name):
    with tf.name_scope(layer_name):
        with tf.name_scope("sub_unit_a"):
            a = residual_sub_unit(inputs,weight_shape,bias_shape)
        with tf.name_scope("sub_unit_b"):
            b = residual_sub_unit(a,weight_shape,bias_shape)
        out = inputs + b
    return out

The decorator is supposed to configure residual_unit for training with layer dropout.
The basic Idea behind the decorator is to create a switching variable to activate/deactivate the layer, and a probability variable to store the probability of that layer being deactivated during any given training step. A deactivated layer should just be passed through during the forward and backward pass. Here is my preliminary solution
def dropout_layer(layer):
    #can be used as decorator
    num_dropout_layers=len(tf.get_collection("switches"))
    switch = tf.Variable(1,trainable=False,name='dropout/switches/{}'.format(num_dropout_layers))
    dropout_prob = tf.Variable(0.5,trainable=False,
                               name='dropout/probabilities/{}'.format(num_dropout_layers))

    tf.add_to_collection('switches',switch)
    tf.add_to_collection('dropout_probabilities',dropout_prob)

    def layer_wrapper(*args,**kwargs):
        inputs=args[0] #requires first arg to be inputs
        output = layer(*args,**kwargs) #normal output of layer

        forward = tf.cond(tf.cast(switch,tf.bool), #if layer is disabled, inputs are passed on to next layer.
                         lambda: output,
                         lambda: inputs)

        backward = tf.cond(tf.cast(switch,tf.bool), #gradient is stopped for backprop if layer is disabled
                         lambda: forward,
                         lambda: tf.zeros_like(forward))

        return forward + tf.stop_gradient(forward-backward)
    return layer_wrapper

def assign_switches(vec):
    switches = tf.get_collection('switches')
    assert len(vec) == len(switches)
    return [switches[i].assign(vec[i]) for i in range(len(switches))]

But it doesn't work
I copied some of @yaroslavvb 's example to do a quick test
@dropout_layer
def add(x,name):
    return tf.add(x,0,name=name)

x = tf.ones((),name='x')
print([i.name for i in tf.get_collection('switches')])
y0 = add(x,'y0')
print([i.name for i in tf.get_collection('switches')])
y1 = add(x,'y1')
print([i.name for i in tf.get_collection('switches')])
y = tf.stack([y0,y1],name='y')

z = tf.reduce_sum(y)

grad = tf.gradients(z, [x])[0]

sess = tf.Session()
sess.run(tf.global_variables_initializer())

print("\nValue %.1f, gradient %.1f\n"%tuple(sess.run([z, grad])))

print([i.name for i in tf.get_collection('switches')])

sess.run(assign_switches([0,0]))
print("Value %.1f, gradient %.1f"%tuple(sess.run([z, grad])))

sess.run(assign_switches([1,0]))
print("Value %.1f, gradient %.1f"%tuple(sess.run([z, grad])))

#output

bash-3.2$ python test_layer_dropout.py
['dropout/switches/0:0']
['dropout/switches/0:0']
['dropout/switches/0:0']
W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.1 instructions, but these are
 available on your machine and could speed up CPU computations.
W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.2 instructions, but these are
 available on your machine and could speed up CPU computations.
W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX instructions, but these are av
ailable on your machine and could speed up CPU computations.
W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX2 instructions, but these are a
vailable on your machine and could speed up CPU computations.
W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use FMA instructions, but these are av
ailable on your machine and could speed up CPU computations.

Value 2.0, gradient 2.0

['dropout/switches/0:0']
Traceback (most recent call last):
  File "test_layer_dropout.py", line 57, in <module>
    sess.run(assign_switches([0,0]))
  File "test_layer_dropout.py", line 30, in assign_switches
    assert len(vec) == len(switches)
AssertionError

it seems like one switching variable is being created somehow before the creation of y0 or y1, but no more are created with the calls to add().
I'm also not convinced my method would work anyway or if its the smartest way of going about this, do you guys have any thoughts?

this isn't very elegant, but it works.
def layer_wrapper(layer,layer_args,layer_kwargs={},switch=1):
    output = layer(*layer_args,**layer_kwargs) #normal output of layer

    forward = tf.cond(tf.cast(switch,tf.bool), #if layer is disabled, inputs are passed on to next layer.
                     lambda: output,
                     lambda: x)

    backward = tf.cond(tf.cast(switch,tf.bool), #gradient is stopped for backprop if layer is disabled
                     lambda: forward,
                     lambda: tf.zeros_like(forward))

    return backward + tf.stop_gradient(forward-backward)

def assign_switches(vec):
    with tf.variable_scope('layer_dropout', reuse=True):
        switches = tf.get_collection('switches')
    assert len(vec) == len(switches)
    return [switches[i].assign(vec[i]) for i in range(len(switches))]

def make_dropout_vars():
    with tf.variable_scope('layer_dropout', reuse=True):
        switches = tf.get_collection('switches')
        switch = tf.Variable(1,name="switches/"+str(len(switches)))
        drop_prob = tf.Variable(0.5,name="probability/"+str(len(switches)))
        tf.add_to_collection('switches',switch)
        tf.add_to_collection('dropout_probabilities',drop_prob)
        return switch

To mirror @yaroslavvb 's example
def add(x,name):
    return x+0
x = tf.ones((), name="x")
y0 = layer_wrapper(add,(x,"y0"),switch=make_dropout_vars())
y1 = layer_wrapper(add,(x,"y1"),switch=make_dropout_vars())

y = tf.stack([y0, y1], name="y")

z = tf.reduce_sum(y)

grad = tf.gradients(z, [x])[0]

sess = tf.Session()
sess.run(tf.global_variables_initializer())

print("\nValue %.1f, gradient %.1f"%tuple(sess.run([z, grad])))

sess.run(assign_switches([0,0]))
print("Value %.1f, gradient %.1f"%tuple(sess.run([z, grad])))

sess.run(assign_switches([0,1]))
print("Value %.1f, gradient %.1f"%tuple(sess.run([z, grad])))

This produces the same output as the example.

Ok, this fixes the probably of the gradient not being passed on to the previous layer during backprop if a layer is disabled.
import tensorflow as tf
from tensorflow.python.framework import ops

@tf.RegisterGradient("PassThroughGrad")
def _pass_through_grad(unused_op, grad):
    return grad, grad

def pass_through(inputs,name):
    with tf.Graph().as_default() as g:
        with g.gradient_override_map({name:"PassThroughGrad"}):
            I = tf.identity(inputs,name)
            return I

def layer_wrapper(layer,layer_args,layer_kwargs={},switch=1,id_op_num=None):
    id_op_name= 'my_id_op/{}'.format(id_op_num)
    output = layer(*layer_args,**layer_kwargs) #normal output of layer

    forward = tf.cond(tf.cast(switch,tf.bool), #if layer is disabled, inputs are passed on to next layer.
                     lambda: output,
                     lambda: layer_args[0])

    backward = tf.cond(tf.cast(switch,tf.bool), #gradient is stopped for backprop if layer is disabled
                     lambda: forward,
                     lambda: pass_through(forward,id_op_name))

    return backward + tf.stop_gradient(forward-backward)

def dropout(prob):
    def dec(layer):
        def wrapperwrapper(*layer_args,**layer_kwargs):
            switch = make_dropout_vars(prob)
            return layer_wrapper(layer,layer_args,layer_kwargs,switch=switch,id_op_num=switch.name[-1])
        return wrapperwrapper
    return dec

def assign_switches(vec):
    with tf.variable_scope('layer_dropout', reuse=True):
        switches = tf.get_collection('switches')
    assert len(vec) == len(switches)
    return [switches[i].assign(vec[i]) for i in range(len(switches))]

def make_dropout_vars(prob=0.5):
    with tf.variable_scope('layer_dropout', reuse=True):
        switches = tf.get_collection('switches')
        switch = tf.Variable(1,name="switches/"+str(len(switches)))
        drop_prob = tf.Variable(0.5,name="probability/"+str(len(switches)))
        tf.add_to_collection('switches',switch)
        tf.add_to_collection('dropout_probabilities',drop_prob)
        return switch

Then you just decorate your function with @dropout(0.5) or whatever probability you want

Hi guys,
I wanted to chip in a bit. I may be completely missing something, but I believe tf.cond already sets the gradient for the unused path to zero. This should prevent unwanted updates to Variables. Here is some code from a presentation/demo I'm giving tomorrow:
Stochastic depth layer (with 1x1 convolution depth mapping, if needed). Not totally full-featured, but works for a simple illustration.
def stochastic_depth_conv2d(inputs, filters, kernel_size, keep_prob, padding='same', activation=tf.nn.relu, name=None):
    default_name = tf.get_default_graph().unique_name('stochastic_depth_conv')
    with tf.variable_scope(name, default_name):
        def full_layer():
            return tf.layers.conv2d(inputs, filters, kernel_size, padding=padding, activation=activation, name='conv')
        def skip_layer():
            if inputs.get_shape().as_list()[-1] != filters:
                return tf.layers.conv2d(inputs, filters, [1, 1], padding=padding, activation=activation, name='skip')
            else:
                return inputs
        pred = tf.random_uniform([]) < keep_prob
        return tf.cond(pred, full_layer, skip_layer), pred

Some code to print out gradients based on randomly switching some layers "on" or "off":
tf.reset_default_graph()
inputs = tf.placeholder(tf.float32, [None, 3, 3, 1], name='inputs')
keep_prob = tf.placeholder(tf.float32, [], name='keep_prob')
conv1, pred1 = stochastic_depth_conv2d(inputs, 3, [3, 3], keep_prob, name='conv1')
conv2, pred2 = stochastic_depth_conv2d(conv1, 3, [3, 3], keep_prob, name='conv2')
conv3, pred3 = stochastic_depth_conv2d(conv2, 3, [3, 3], keep_prob, name='conv3')
init = tf.global_variables_initializer()

opt = tf.train.GradientDescentOptimizer(0.05)
var_list = tf.trainable_variables()
grads = opt.compute_gradients(conv3, var_list)

with tf.Session() as sess:
    sess.run(init)
    feed_dict = {
        inputs: np.random.normal(size=[1, 3, 3, 1]),
        keep_prob: 0.5
    }
    g, p1, p2, p3 = sess.run([grads, pred1, pred2, pred3], feed_dict)
    print(p1, p2, p3)
    for var, grad_value in zip(var_list, g):
        grad, value = grad_value
        print('',var.op.name, grad.squeeze(), sep='\n')

Sample output from the above:
False True False

conv1/conv/kernel
[[[ 0.  0.  0.]
  [ 0.  0.  0.]
  [ 0.  0.  0.]]

 [[ 0.  0.  0.]
  [ 0.  0.  0.]
  [ 0.  0.  0.]]

 [[ 0.  0.  0.]
  [ 0.  0.  0.]
  [ 0.  0.  0.]]]

conv1/conv/bias
[ 0.  0.  0.]

conv1/skip/kernel
[ 0.88905168  1.15772355  3.13942909]

conv1/skip/bias
[-0.24839747  0.25073451  2.12950516]

conv2/conv/kernel
[[[[ 1.11243725  0.06358987  0.06358987]
   [ 1.97543406  0.11292107  0.11292107]
   [ 1.45493352  0.08316787  0.08316787]]

  [[ 0.06358987  0.          1.04884744]
   [ 0.11292107  0.          1.86251295]
   [ 0.08316787  0.          1.37176561]]

  [[ 0.          0.          0.06358987]
   [ 0.          0.          0.11292107]
   [ 0.          0.          0.08316787]]]

 [[[ 0.          0.          1.93598056]
   [ 0.          0.          3.43785858]
   [ 0.          0.          2.53202868]]

  [[ 1.87239075  1.87239075  0.06358987]
   [ 3.32493734  3.32493734  0.11292107]
   [ 2.44886065  2.44886065  0.08316787]]

  [[ 0.06358987  0.06358987  0.        ]
   [ 0.11292107  0.11292107  0.        ]
   [ 0.08316787  0.08316787  0.        ]]]

 [[[ 0.82354331  0.82354331  0.82354331]
   [ 1.4624244   1.4624244   1.4624244 ]
   [ 1.07709503  1.07709503  1.07709503]]

  [[ 0.82354331  0.          0.        ]
   [ 1.4624244   0.          0.        ]
   [ 1.07709503  0.          0.        ]]

  [[ 0.          0.          0.82354331]
   [ 0.          0.          1.4624244 ]
   [ 0.          0.          1.07709503]]]]

conv2/conv/bias
[ 4.  3.  5.]

conv3/conv/kernel
[[[[ 0.  0.  0.]
   [ 0.  0.  0.]
   [ 0.  0.  0.]]

  [[ 0.  0.  0.]
   [ 0.  0.  0.]
   [ 0.  0.  0.]]

  [[ 0.  0.  0.]
   [ 0.  0.  0.]
   [ 0.  0.  0.]]]

 [[[ 0.  0.  0.]
   [ 0.  0.  0.]
   [ 0.  0.  0.]]

  [[ 0.  0.  0.]
   [ 0.  0.  0.]
   [ 0.  0.  0.]]

  [[ 0.  0.  0.]
   [ 0.  0.  0.]
   [ 0.  0.  0.]]]

 [[[ 0.  0.  0.]
   [ 0.  0.  0.]
   [ 0.  0.  0.]]

  [[ 0.  0.  0.]
   [ 0.  0.  0.]
   [ 0.  0.  0.]]

  [[ 0.  0.  0.]
   [ 0.  0.  0.]
   [ 0.  0.  0.]]]]

conv3/conv/bias
[ 0.  0.  0.]

@samjabrahams so theres no need for the gradient_override_map with the Identity op? Does your code actually skip the layer during backprop, or does the weight update get carried out all the same, just with gradients that are all zero? I guess what I'm trying to understand is, for a very deep network, will this method still save time / memory?

@alexanderalang the initial tests look promising. Here's some sample code and respective timing outputs with a very simple CNN (no pooling, batch norm, etc) doing a single training step on dummy data/labels and batch size 32. This is from running on a 2013 macbook pro CPU, so focus on the relative times instead of the total time.
Stochastic depth
Training code
# Stochastic version
tf.reset_default_graph()
print('Building graph...')
inputs = tf.placeholder(tf.float32, [None, 228, 228, 3], name='inputs')
labels = tf.placeholder(tf.int32, None)
labels_onehot = tf.one_hot(labels, 10)
keep_prob = tf.placeholder(tf.float32, [], name='keep_prob')
conv, _ = stochastic_depth_conv2d(inputs, 32, [3, 3], keep_prob)
for i in range(10):
    conv, _ = stochastic_depth_conv2d(conv, 32, [3, 3], keep_prob)
flat = tf.reshape(conv, [-1, 32 * 228 * 228])
logits = tf.layers.dense(flat, 10)
loss = tf.nn.softmax_cross_entropy_with_logits(labels=labels_onehot, logits=logits)

train = tf.train.GradientDescentOptimizer(0.05).minimize(loss)

init = tf.global_variables_initializer()

print('Done.')

with tf.Session() as sess:
    sess.run(init)
    feed_dict = {
        inputs: np.random.normal(size=[32, 228, 228, 3]),
        # Adjust this parameter to see run speed adjust
        keep_prob: 0.5,
        labels: np.random.randint(0, 10, size=[32])
    }
    print('Timing stochastic depth run...')
    start_t = time.time()
    _ = sess.run(train, feed_dict)
    end_t = time.time()
    print('Done.')
    print(end_t - start_t)

Output:
Building graph...
Done.
Timing stochastic depth run...
Done.
13.219794034957886

"Normal" Conv2D layer
Training code:
# Standard CNN version
tf.reset_default_graph()
print('Building graph...')
inputs = tf.placeholder(tf.float32, [None, 228, 228, 3], name='inputs')
labels = tf.placeholder(tf.int32, None)
labels_onehot = tf.one_hot(labels, 10)
conv = tf.layers.conv2d(inputs, 32, [3, 3], padding='same', activation=tf.nn.relu)
for i in range(10):
    conv = tf.layers.conv2d(conv, 32, [3, 3], padding='same', activation=tf.nn.relu)
flat = tf.reshape(conv, [-1, 32 * 228 * 228])
logits = tf.layers.dense(flat, 10)
loss = tf.nn.softmax_cross_entropy_with_logits(labels=labels_onehot, logits=logits)

train = tf.train.GradientDescentOptimizer(0.05).minimize(loss)

init = tf.global_variables_initializer()

print('Done.')

with tf.Session() as sess:
    sess.run(init)
    feed_dict = {
        inputs: np.random.normal(size=[32, 228, 228, 3]),
        labels: np.random.randint(0, 10, size=[32])
    }
    print('Timing standard run...')
    start_t = time.time()
    _ = sess.run(train, feed_dict)
    end_t = time.time()
    print('Done.')
    print(end_t - start_t)

Output:
Building graph...
Done.
Timing standard run...
Done.
25.8157160282135

Adjusting the keep_prob feed value in the first code alters the average relative runtime as you'd expect.
keep_prob = 0.2 -->  5.950854063034058 seconds
keep_prob = 0.8 --> 18.41518807411194 seconds

#8817, @samjabrahams, I ended up with the same solution. But, it would be easier if trainable parameter of the get_variable was tensor typed.

@awav The trainable parameter just puts that Variable object into the TRAINABLE_VARIABLES collection. I don't think TensorFlow is designed to have the var_list passed into Optimizer.compute_gradients() changed (the compute_gradients operation has the variables it updates statically defined).
Since we're using tf.cond already in order to implement layer skipping in the forward pass, I'm not sure that it's easier to explicitly block the gradients as opposed to taking advantage of it via tf.cond for free :)

Though this is outside of the scope of layers in TensorFlow core, I'm sure that Stochastic Depth would be a welcome addition to TensorFlow Addons.
Transitioning the issue to tensorflow/addons now; @seanpmorgan for visibility.

authors: alexanderalang asimshankar awav dynamicwebpaige samjabrahams yaroslavvb


text:
Update .gitignore files for Android Studio

Without these, Git shows lots of noisy build/IDE config files.
These files are based on these two sources (plus the list of added files that Git shows when I build in Android Studio):
https://github.com/github/gitignore/blob/master/Android.gitignore
https://github.com/github/gitignore/pull/2103/files
Tested in Android Studio 3.0 Beta 2.

Can one of the admins verify this patch?

@aselle is this necessary?

Nagging Reviewer @aselle: It has been 41 days with no activity and the awaiting review label was assigned. Can you please take a look?

aselle@ do you think these changes are necessary or should we close this PR?

Nagging Reviewer @aselle: It has been 14 days with no activity and the awaiting review label was assigned. Can you please take a look?

Nagging Reviewer @aselle: It has been 29 days with no activity and the awaiting review label was assigned. Can you please take a look?

Nagging Reviewer @aselle: You have been added as a reviewer to this pull request. Please add your review or reassign. It has been 45 days with no activity and the awaiting review label has been applied.

Nagging Reviewer @aselle: You have been added as a reviewer to this pull request. Please add your review or reassign. It has been 59 days with no activity and the awaiting review label has been applied.

source: gharchive/pull-request

authors: case540 daj drpngx tensorflow-jenkins tensorflowbutler


text:
Update to correct method name in local example.

There is an error in the current distributed TensorFlow documentation which caused me a little trouble when verifying that installation was correct.

Can one of the admins verify this patch?

Thanks! (I know it sucks to have to sign a CLA for a doc change).

Oh man - didn't see that one coming. I don't want to sign this before running this by a lawyer. I'm going to close this PR for now. If someone who has signed it (or is an Alphabet Employee) gets motivated they can make a similar change.

authors: etrain tensorflow-jenkins vrv


text:
Fix GatherV2 shape inference

Fixes #42522.
https://github.com/tensorflow/tensorflow/blob/8a002f2269310f513d326eaeff5c73f679c73f77/tensorflow/core/kernels/gather_op.cc#L92-L107

Sorry about the rollback, looks like it was totally spurious. I've rolled your PR forward, hopefully permanently this time (should show up in a few minutes).

authors: WindQAQ allenlavoie


text:
Migrate ops fuzzers to FuzzTest format

Creates a set of fuzzers to FuzzTest style. One of the benefits is that this will reduce storage size required for the fuzzers, because the fuzzers will all be based off the same binary whereas the non-FuzzTest fuzzers will have a binary per fuzzer. This storage requirement has caused an issue on the OSS-Fuzz side:
https://github.com/google/oss-fuzz/issues/9792
Migrating to FuzzTest will make it easier to add new ops-specific fuzzers since we won't have to worry about disk size. The existing fuzzesr can be several GBs of storage and it quickly goes beyond what we have available at OSS-Fuzz.
It would however be nice to re-use the existing fuzzer helper logic from fuzz_session.h so I added a macro similar to what we have for libFuzzer but simple for FuzzTest. I migrated a set of the existing fuzzers.
I figured it would be nice to do a soft transition, so we can remove the existing fuzzers after the ones introduced in this PR has shown to run for a while. I'm also curious in whether we will see a difference in performance from the FuzzTest and libFuzzer harnesses.
This PR supersedes https://github.com/tensorflow/tensorflow/pull/61122

CC @fcoUnda


text:
ConcatOp error text change

I think this message was meant to be ended with a ] but I am uncertain if that notation is clear.
Before this change, the script:
import tensorflow as tf

with tf.Session() as sess:
    sess.run(tf.concat(0, [1, 2, 3]))

Throws the following exception:

InvalidArgumentError: ConcatOp : Expected concatenating dimensions in the range [0, 0**)**, but got 0

After this change the output is:

InvalidArgumentError: ConcatOp : Expected concatenating dimensions in the range [0, 0**]***, but got 0

Can one of the admins verify this patch?

No, it was correct before. [0,0) means excluding 0, [0,0] means including 0, which would also mean that 0 would be valid and the error message would be confusing indeed.

Ah, that makes sense. Thank you

authors: eerwitt martinwicke tensorflow-jenkins


text:
LRN and LRNGrad CPU optimization

Description

Optimize the CPU implementation of LRN and LRNGrad.  There was about an 8x speedup during benchmarking.
https://github.com/tensorflow/tfjs/issues/582

For repository owners only:
Please remember to apply all applicable tags to your pull request.
Tags: FEATURE, BREAKING, BUG, PERF, DEV, DOC, SECURITY
For more info see: https://github.com/tensorflow/tfjs/blob/master/DEVELOPMENT.md

This change is

Thanks Josh this is awesome!

authors: jgartman nsthorat

repo: tensorflow/tfjs-core

license_source: bigquery


text:
Error: L6218E: Undefined symbol __clrsbsi2 (referred from div.o).

Hi! I use the arm-none-eabi-g++ and  arm-none-eabi-gcc to build the  libtensorflow-microlite.a, it is ok. However, when I try to compile the hello world source codes by armclang.exe(Arm C++ Compiler for Embedded 6), and link it with the library by armlink.exe, the error occurs during the link. Its messages are some confusing. What should I do to deal with the error? Thanks for your help!

Hi @Raise-me-up,
Can you specify the build command to reproduce this?

authors: Raise-me-up mansnils

repo: tensorflow/tflite-micro


text:
Document Creation - Kernel Development Guide

Create a Kernel Development Guide for Skymizer contractors. This guide should cover some initial procedures that Skymizer contractors can follow getting started on their visit to Toronto.

repo: tenstorrent/tt-metal


text:
TTNN eltwise ops - Update Examples

For all TTNN eltwise ops:
The tensor shapes provided in examples are inconsistent with the op.
Currently we support device operations for ranks > 2 for most of the ops as per doc. The current examples in the doc creates a 1D tensor.

[x] #14982
[x] #14983
[x] #14984
[x] #14985
[x] #14986
[x] #14987

Closing issue as all PRs have been merged to main

authors: VirdhatchaniKN mcw-anasuya


text:
API tests

A plan is to have a set of API tests:

To showcase UMD usage to clients
Which is arch agnostic
Which showcases (like this simplest one) how cumbersome is the current minimal UMD setup.

A lot of stuff should be taken from existing tests.
At this point it seems harder to rewrite existing tests rather than starting a new one.
The tests should also somewhat follow code examples shown in this diagram: https://docs.google.com/drawings/d/1-m1azdsBqMA0A6ATYRMfkhyeuOJuGCEI62N5a96LXj0/edit

Closing this since we have initial API tests, following tests need to be added together with new features...

authors: broskoTT pjanevskiTT

repo: tenstorrent/tt-umd


text:
How to make a slight strafe movement (left right) when move a mouse?

Good evening,
I wanted to create a slight interactive parallax when you move mouse left or right (camera position moves on one or two axis with flexible limit).
I tried to use Orbital and Control. Unfortunately, they can't (so far as I know) make a slight strafe movement with limits. I was wondering if there is any way around.

Basically recreating the A and D buttons in FPS games with a limit of "how far camera would slide".
I seen in Orbital it's done in regardless of looking left and right, but in my case I wanted to do that strafe camera move.

Hello
Yes this should be faily easy place your orbi controls object inside of a Group object.
Then using a script you can move the group object around using the mouse position.
Cheers

You were right, it was just a couple of lines. Works! Thank you!
Will research what commands can be used for a slight drag but already the front page look way better!
btw if someone will need it in the future
var object;
function initialize()
{
	object = scene.getObjectByName("MainCamera

");
}
function update()
{
	object.position.x += Mouse.delta.x * 0.0002;
	object.position.y += Mouse.delta.y * 0.0002;
}

authors: petepolyakov tentone

repo: tentone/nunuStudio

license: MIT


text:
console enhancements

I understand you are already working on a 2nd window for console output.  Here are some things I'd like to help out with.

if I run $$ in the MDI window it would be nice if I didn't have to turn verbose off to see it.
it would be really nice to set a regex filter if you are hunting for a value.  Maybe this is the best way to deal with #1.  GROK is a great way to manage layering regex's
My centroid acorn software uses multiple windows and I hate it.  Would  you be open to me prototyping having the console show up in one of the side tabs where "goto" and "Macros" live configurable via the Settings: App?

I understand you are already working on a 2nd window for console output.

I have just added the current console control to a floating window. I have added a filter checkbox for getting rid of realtime messages.

if I run $$ in the MDI window it would be nice if I didn't have to turn verbose off to see it.

The filter checkbox mentioned above will help? Somehow only showing realtime reports on changes may help to but hard to get right without of overhead?

it would be really nice to set a regex filter if you are hunting for a value. Maybe this is the best way to deal with #1. GROK is a great way to manage layering regex's

GROK is a third-party library?

My centroid acorn software uses multiple windows and I hate it. Would you be open to me prototyping having the console show up in one of the side tabs where "goto" and "Macros" live configurable via the Settings: App?

Give it a try, but I guess that would cover a lot of the senders real estate?

if I run $$ in the MDI window it would be nice if I didn't have to turn verbose off to see it.

The filter checkbox mentioned above will help? Somehow only showing realtime reports on changes may help to but hard to get right without of overhead?

yes this will help

it would be really nice to set a regex filter if you are hunting for a value. Maybe this is the best way to deal with #1. GROK is a great way to manage layering regex's

GROK is a third-party library?

here is a C# implementation:  https://github.com/Marusyk/grok.net

My centroid acorn software uses multiple windows and I hate it. Would you be open to me prototyping having the console show up in one of the side tabs where "goto" and "Macros" live configurable via the Settings: App?

Give it a try, but I guess that would cover a lot of the senders real estate?

I'll give it a try, what resolution is your laptop so I know what minimum display sizes you need?

I'll give it a try, what resolution is your laptop so I know what minimum display sizes you need?

If we can keep the default size as is I would be happy. An enhancement could be to store the latest size somewhere (in the registry?) and restore to that. It is possible to hide/show parts of the UI depending on the size, I do that already with the Program limits box when more than 3 axes are displayed in the DRO.

For troubleshooting resone, it will be good to see commands, sent to the device.

For troubleshooting resone, it will be good to see commands, sent to the device.

I may add that as an option (default off or perhaps on if a GRbl controller is detected) as enabling this severly limits the max speed attainable for laser engraving when executing lots of short movements at a high feedrate. See this discussion.
MDI commands will be added to the console in the next build.

authors: calabr jschoch terjeio

repo: terjeio/Grbl-GCode-Sender


text:
Translate fully-italic lines into CTCP ACTION

Discord doesn't have any ACTION equivalent. Instead /me foo sends *foo*, italicizing the entire line. w-d should (as an option, at least) turn incoming lines that are entirely wrapped in italics into ACTIONs so that they render correctly in weechat.

I feel this should probably be optional, (off by default) as Discord formatting isn't IRC formatting.  It's annoying that discord doesn't annotate messages with more details, because there are times when someone might send a fully italicized message that isn't a /me action.

I probably got _ and * mixed up since they're interchangeable as far as formatting goes. And yeah, I agree that this should be optional.

repo: terminal-discord/weechat-discord


text:
Update to ndarray 0.12.0

Note that this is a breaking change.

Thanks!

repo: termoshtt/ndarray-linalg

license: mit


text:
Acorn throwing an error on a perfectly valid package.json file (?)

Hey, I'm not sure what's going on here of if this is even really an acorn issue, but I'm getting this logged in my build output when trying to build a bundle via webpack:
ERROR in ./~/websocket/package.json
Module parse failed: /Users/nfriedly/Downloads/cognitive-ads-ui/node_modules/websocket/package.json Unexpected token (2:9)
You may need an appropriate loader to handle this file type.
SyntaxError: Unexpected token (2:9)
    at Parser.pp.raise (/Users/nfriedly/Downloads/cognitive-ads-ui/node_modules/acorn/dist/acorn.js:920:13)
    at Parser.pp.unexpected (/Users/nfriedly/Downloads/cognitive-ads-ui/node_modules/acorn/dist/acorn.js:1483:8)
    at Parser.pp.semicolon (/Users/nfriedly/Downloads/cognitive-ads-ui/node_modules/acorn/dist/acorn.js:1462:73)
    at Parser.pp.parseExpressionStatement (/Users/nfriedly/Downloads/cognitive-ads-ui/node_modules/acorn/dist/acorn.js:1976:8)
    at Parser.pp.parseStatement (/Users/nfriedly/Downloads/cognitive-ads-ui/node_modules/acorn/dist/acorn.js:1754:188)
    at Parser.pp.parseBlock (/Users/nfriedly/Downloads/cognitive-ads-ui/node_modules/acorn/dist/acorn.js:1991:21)
    at Parser.pp.parseStatement (/Users/nfriedly/Downloads/cognitive-ads-ui/node_modules/acorn/dist/acorn.js:1735:19)
    at Parser.pp.parseTopLevel (/Users/nfriedly/Downloads/cognitive-ads-ui/node_modules/acorn/dist/acorn.js:1648:21)
    at Parser.parse (/Users/nfriedly/Downloads/cognitive-ads-ui/node_modules/acorn/dist/acorn.js:1616:17)
    at Object.parse (/Users/nfriedly/Downloads/cognitive-ads-ui/node_modules/acorn/dist/acorn.js:882:44)
    at Parser.parse (/Users/nfriedly/Downloads/cognitive-ads-ui/node_modules/webpack/lib/Parser.js:902:15)
    at DependenciesBlock.<anonymous> (/Users/nfriedly/Downloads/cognitive-ads-ui/node_modules/webpack/lib/NormalModule.js:104:16)
    at DependenciesBlock.onModuleBuild (/Users/nfriedly/Downloads/cognitive-ads-ui/node_modules/webpack-core/lib/NormalModuleMixin.js:310:10)
    at nextLoader (/Users/nfriedly/Downloads/cognitive-ads-ui/node_modules/webpack-core/lib/NormalModuleMixin.js:275:25)
    at /Users/nfriedly/Downloads/cognitive-ads-ui/node_modules/webpack-core/lib/NormalModuleMixin.js:259:5
    at Storage.provide (/Users/nfriedly/Downloads/cognitive-ads-ui/node_modules/enhanced-resolve/lib/CachedInputFileSystem.js:52:20)
    at CachedInputFileSystem.readFile (/Users/nfriedly/Downloads/cognitive-ads-ui/node_modules/enhanced-resolve/lib/CachedInputFileSystem.js:140:24)
    at DependenciesBlock.onLoadPitchDone (/Users/nfriedly/Downloads/cognitive-ads-ui/node_modules/webpack-core/lib/NormalModuleMixin.js:255:7)
    at DependenciesBlock.loadPitch (/Users/nfriedly/Downloads/cognitive-ads-ui/node_modules/webpack-core/lib/NormalModuleMixin.js:182:27)
    at DependenciesBlock.doBuild (/Users/nfriedly/Downloads/cognitive-ads-ui/node_modules/webpack-core/lib/NormalModuleMixin.js:241:4)
    at DependenciesBlock.build (/Users/nfriedly/Downloads/cognitive-ads-ui/node_modules/webpack/lib/NormalModule.js:84:14)
    at Compilation.buildModule (/Users/nfriedly/Downloads/cognitive-ads-ui/node_modules/webpack/lib/Compilation.js:126:9)
    at /Users/nfriedly/Downloads/cognitive-ads-ui/node_modules/webpack/lib/Compilation.js:309:10
    at /Users/nfriedly/Downloads/cognitive-ads-ui/node_modules/webpack/lib/NormalModuleFactory.js:58:13
    at NormalModuleFactory.applyPluginsAsyncWaterfall (/Users/nfriedly/Downloads/cognitive-ads-ui/node_modules/tapable/lib/Tapable.js:75:69)
    at onDoneResolving (/Users/nfriedly/Downloads/cognitive-ads-ui/node_modules/webpack/lib/NormalModuleFactory.js:38:11)
    at onDoneResolving (/Users/nfriedly/Downloads/cognitive-ads-ui/node_modules/webpack/lib/NormalModuleFactory.js:121:6)
    at /Users/nfriedly/Downloads/cognitive-ads-ui/node_modules/webpack/lib/NormalModuleFactory.js:116:7
    at /Users/nfriedly/Downloads/cognitive-ads-ui/node_modules/async/lib/async.js:726:13
    at /Users/nfriedly/Downloads/cognitive-ads-ui/node_modules/async/lib/async.js:52:16
 @ ./~/websocket/lib/version.js 1:17-43

For reference, here's the package.json file that it's claiming is invalid:
{
  "_args": [
    [
      "websocket@^1.0.22",
      "/Users/nfriedly/Downloads/cognitive-ads-ui/node_modules/watson-speech"
    ]
  ],
  "_from": "websocket@>=1.0.22 <2.0.0",
  "_id": "websocket@1.0.23",
  "_inCache": true,
  "_installable": true,
  "_location": "/websocket",
  "_nodeVersion": "0.10.45",
  "_npmOperationalInternal": {
    "host": "packages-16-east.internal.npmjs.com",
    "tmp": "tmp/websocket-1.0.23.tgz_1463625793005_0.4532310354989022"
  },
  "_npmUser": {
    "email": "brian@worlize.com",
    "name": "theturtle32"
  },
  "_npmVersion": "2.15.1",
  "_phantomChildren": {},
  "_requested": {
    "name": "websocket",
    "raw": "websocket@^1.0.22",
    "rawSpec": "^1.0.22",
    "scope": null,
    "spec": ">=1.0.22 <2.0.0",
    "type": "range"
  },
  "_requiredBy": [
    "/watson-speech"
  ],
  "_resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.23.tgz",
  "_shasum": "20de8ec4a7126b09465578cd5dbb29a9c296aac6",
  "_shrinkwrap": null,
  "_spec": "websocket@^1.0.22",
  "_where": "/Users/nfriedly/Downloads/cognitive-ads-ui/node_modules/watson-speech",
  "author": {
    "email": "brian@worlize.com",
    "name": "Brian McKelvey",
    "url": "https://www.worlize.com/"
  },
  "browser": "lib/browser.js",
  "bugs": {
    "url": "https://github.com/theturtle32/WebSocket-Node/issues"
  },
  "config": {
    "verbose": false
  },
  "contributors": [
    {
      "email": "ibc@aliax.net",
      "name": "Iñaki Baz Castillo",
      "url": "http://dev.sipdoc.net"
    }
  ],
  "dependencies": {
    "debug": "^2.2.0",
    "nan": "^2.3.3",
    "typedarray-to-buffer": "^3.1.2",
    "yaeti": "^0.0.4"
  },
  "description": "Websocket Client & Server Library implementing the WebSocket protocol as specified in RFC 6455.",
  "devDependencies": {
    "buffer-equal": "^0.0.1",
    "faucet": "^0.0.1",
    "gulp": "git+https://github.com/gulpjs/gulp.git#4.0",
    "gulp-jshint": "^1.11.2",
    "jshint-stylish": "^1.0.2",
    "tape": "^4.0.1"
  },
  "directories": {
    "lib": "./lib"
  },
  "dist": {
    "shasum": "20de8ec4a7126b09465578cd5dbb29a9c296aac6",
    "tarball": "https://registry.npmjs.org/websocket/-/websocket-1.0.23.tgz"
  },
  "engines": {
    "node": ">=0.8.0"
  },
  "gitHead": "ba2fa7e9676c456bcfb12ad160655319af66faed",
  "homepage": "https://github.com/theturtle32/WebSocket-Node",
  "keywords": [
    "websocket",
    "websockets",
    "socket",
    "networking",
    "comet",
    "push",
    "RFC-6455",
    "realtime",
    "server",
    "client"
  ],
  "license": "Apache-2.0",
  "main": "index",
  "maintainers": [
    {
      "email": "brian@worlize.com",
      "name": "theturtle32"
    }
  ],
  "name": "websocket",
  "optionalDependencies": {},
  "readme": "ERROR: No README data found!",
  "repository": {
    "type": "git",
    "url": "git+https://github.com/theturtle32/WebSocket-Node.git"
  },
  "scripts": {
    "gulp": "gulp",
    "install": "(node-gyp rebuild 2> builderror.log) || (exit 0)",
    "test": "faucet test/unit"
  },
  "version": "1.0.23"
}

As far as I can tell, everything in that file is perfectly valid (node.js parses it without complaint). I think 2:9 is the " at the end of "_args": which seams to be in order to me.
This could be related to https://github.com/webpack/webpack/issues/303

acorn is a JavaScript parser, not JSON parser. For JSON, you should use just JSON.parse.

Ok, fair enough. Not sure I understand the failure though - isn't all JSON also valid JavaScript?

(Or, at the very least, could Acorn throw a more clear error message for this kind of problem?)

Well, the problem is that beginning is totally valid JavaScript, but not with a meaning you might be putting into it. It's very similar to confusing people are getting when using arrow functions as () => { x: 1 } - such syntax is still a valid JavaScript, but it has a meaning of a block with a label x which points to an expression statement with 1 as an expression, and perfectly executes. Same for JSON - Acorn does attempt to parse it as a valid JavaScript according to JavaScript semantics in statement context, and fails only when syntax is really invalid.
If you want to still parse this as a JavaScript expression, you might want to look at parseExpressionAt(input, offset, options) method which is described in the docs.

authors: RReverser nfriedly

repo: ternjs/acorn


text:
The station extension does not currently work on Firefox. Unable to connect to my wallet.

This is still an issue. Any help?

whats happening with this problem , i still cant connect using firefox???

authors: Bewinliam cherrynoize sneekyparrot

repo: terra-money/station


text:
feat: Bring your own LB

Description
This change allows us to create a target group without creating the load balancer. Though there are some modules out there to create a target group, this change subsequently let us to use an existing load balancer with terraform-aws-atlantis.
Motivation and Context
Like I said above, this change was needed to implement a set of changes in terraform-aws-atlantis, so we can reuse the same VPC, ECS cluster an load blancer with multiple atlantis services.
Breaking Changes
No breaking changes.

@bryantbiggs Would this be a useful feature? or our usecase is unique?

Hi @endrec !
This feature is good to have but not in reusable modules like terraform-aws-modules because it increases the maintenance cost significantly. It also opens a door for a lot of similar requests - bring your own <anything>.
I am going to close this PR.

Hi @antonbabenko,
That's fair, I thought the same when I created the PR, but wanted to see other opinions than my own. :)
Thanks for yours, and thank you for your (tremendous) work on these modules.
Endre

authors: antonbabenko endrec

repo: terraform-aws-modules/terraform-aws-alb


text:
Add the possibility to configure Terraform Resource Lifecycle

Is your request related to a problem? Please describe.
It is not possible to set terraform resource lifecycles.
Describe the solution you'd like.
Add a new property to set it.
Additional context
We need to add prevent_destroy to the table.

Not everyone needs it, but Terraform does not allow us to set it using variables, so we can't make it in the module.

is there already a feature request to support that in terraform?

Yes, there are two related issues:
https://github.com/hashicorp/terraform/issues/3116
https://github.com/hashicorp/terraform/issues/27360

authors: antonbabenko benkeil


text:
Cannot use custom launch template when launch_template_name is not specified

Description
Hi team, I found a little confusing behavior about eks-managed-node-group module.
When I don't specify launch_template_name and leave it blank, the launch template will not be used by the corresponding managed node group. I've already found why it's happening (details are below), so could you judge if it's is an intended behavior?
Versions

Terraform: v1.1.4

Provider(s): registry.terraform.io/hashicorp/aws v3.73.0

Module: v18.2.3

Reproduction

Steps to reproduce the behavior:

Deploy a VPC, an EKS cluster, and a managed node group. To reproduce this, we must explicitly use eks-managed-node-group module, not using eks_managed_node_groups input of the EKS cluster module.
Code Snippet to Reproduce

module "vpc" {
  source = "terraform-aws-modules/vpc/aws"

  name = var.cluster_name
  cidr = "10.0.0.0/16"

  azs             = data.aws_availability_zones.available.names
  private_subnets = ["10.0.1.0/24", "10.0.2.0/24", "10.0.3.0/24"]
  public_subnets  = ["10.0.101.0/24", "10.0.102.0/24", "10.0.103.0/24"]

  enable_nat_gateway     = true
  single_nat_gateway     = true
  one_nat_gateway_per_az = false
}

module "cluster" {
  source  = "terraform-aws-modules/eks/aws"
  version = "~> 18.0"

  cluster_version = "1.21"
  cluster_name    = var.cluster_name
  vpc_id          = module.vpc.vpc_id
  subnet_ids      = module.vpc.private_subnets
}

module "managed_node_group" {
  source = "terraform-aws-modules/eks/aws//modules/eks-managed-node-group"

  name                 = "group"
  cluster_name         = var.cluster_name
  # this line is practically required
  # launch_template_name = "template_name"

  subnet_ids     = module.vpc.public_subnets
  vpc_id         = module.vpc.vpc_id
  vpc_security_group_ids = [module.cluster.node_security_group_id]
}

Expected behavior
the resulting ASG uses the custom launch template.
Actual behavior
the resulting ASG uses the default launch template.
Looking at tfstate, launch_template field in eks_node_group resource is empty.
Terminal Output Screenshot(s)

Additional context
The behavior is due to the code below. When launch_template_name is undefined, it won't register the custom launch template to the managed node group.
https://github.com/terraform-aws-modules/terraform-aws-eks/blob/16f46db94b7158fd762d9133119206aaa7cf6d63/modules/eks-managed-node-group/main.tf#L32-L33
https://github.com/terraform-aws-modules/terraform-aws-eks/blob/16f46db94b7158fd762d9133119206aaa7cf6d63/modules/eks-managed-node-group/main.tf#L292-L298
We might need another condition to define use_custom_launch_template variable.
BTW if we use eks_managed_node_groups input to deploy managed node groups, the problem won't happen because launch_template_name is always defined internally here.
https://github.com/terraform-aws-modules/terraform-aws-eks/blob/16f46db94b7158fd762d9133119206aaa7cf6d63/node_groups.tf#L272
Thanks!

I can confirm this. encountered the same and came to the same code-wise conclusion upon investigation
if you dont specify LT-name, it will use the EKS default one instead your custom one base on the provided LT config

@bryantbiggs btw contrary to @tmokmss suggestion, I for myself experienced it while do using eks_managed_node_groups block

@bryantbiggs btw contrary to @tmokmss suggestion, I for myself experienced it while do using eks_managed_node_groups block

I don't follow

I was just looking around for solutions to my problem and came across this and wondering if it's related. I have under my EKS config.
eks_managed_node_group_defaults = {
    ami_type               = "AL2_x86_64"
    disk_size              = 50
    vpc_security_group_ids = [aws_security_group.node_group_default_sg.id]
    tags = {
      "k8s.io/cluster-autoscaler/${local.name}" = "owned"
      "k8s.io/cluster-autoscaler/enabled"       = "TRUE"
    }
  }

eks_managed_node_groups = {
    "default" = {
      instance_types = ["t3.large"]
      min_size       = 1
      max_size       = 1
      desired_size   = 1
      disk_size      = 50
      subnet_ids = data.aws_subnets.private_zone1.ids
      placement = {}
    }
}

Everytime I apply it creates a new launch template and recreates the nodes.

@snowzach no they aren't related. can you open a new issue and paste in the output from your plan showing whats triggering the change

This issue has been resolved in version 18.2.5 :tada:

authors: antonbabenko bryantbiggs philicious snowzach tmokmss

repo: terraform-aws-modules/terraform-aws-eks


text:
fix: Possible fix for issue #2006

Description
see issue #2006
Motivation and Context
see issue #2006
Breaking Changes
no breaking changes
How Has This Been Tested?

[x ] I have tested and validated these changes using one or more of the provided examples/* projects
Also tested on my own module using this eks module

hi @pcheung-sfdc - I think there was a little misunderstanding. What I was suggesting in the issue was to use cluster_tags to solve your issue. So if you are setting a global name tag like:
module "eks" {
  name = var.cluster_name

  tags = {
    Name = "foo"
  }
}

You should be able to resolve your issue with:
module "eks" {
  name = var.cluster_name

  tags = {
    Name = "foo"
  }

  cluster_tags = {
    Name = var.cluster_name
  }
}

@bryantbiggs but the name tag is not just the cluster name, it's the security group name. If var.cluster_tags is only to be used by the security group then what you propose would make sense, but if cluster_tags is used for any other resource, having Name be a security group name wouldn't make sense for resources that are not security groups

it's not the same name as the cluster name. It's the cluster-name and some prefix automatically generated (eks-cluster-sg), as well as a suffix (maybe a timestamp). So if we do what you propose, it would make a generic tag Name to represent only a very specific resource, also we have no way of determining what the suffix would be beforehand.

ah, not sure why I thought I saw the name as the cluster name earlier but you are correct. one sec I think I know how to fix/avoid this

authors: bryantbiggs pcheung-sfdc


text:
feat: Add support for ML capacity block reservations with EKS managed node group(s)

Description

Add support for ML capacity block reservations with EKS managed node group(s)

New capacity_type value of CAPACITY_BLOCK was added in https://github.com/hashicorp/terraform-provider-aws/pull/38216

Motivation and Context

Add support for using ML capacity block reservations with EKS managed node group(s)

Breaking Changes

No

How Has This Been Tested?

[ ] I have updated at least one of the examples/* to demonstrate and validate my change(s)
[x] I have tested and validated these changes using one or more of the provided examples/* projects

Tested internally

[x] I have executed pre-commit run -a on my pull request

This PR is included in version 20.17.0 :tada:

authors: antonbabenko bryantbiggs


text:
feat: add GuardDuty Findings support

Description
Support GuardDuty finding events
https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_findings_cloudwatch.html
Motivation and Context
This PR closes #48

Breaking Changes
This PR improves GuardDuty findings event outputs and affects only GuardDuty finding events.
How Has This Been Tested?
Run modified function using AWS-provided sample findings.
https://docs.aws.amazon.com/guardduty/latest/ug/sample_findings.html

when can we merge this?

I would add a test fixture as well

Fixed in #143.
v4.18.0 has been just released.

authors: antonbabenko codigube iogi pjaudiomv


text:
Allow specification of timezone

timezone is supported by Microsoft SQL Server, allow it as optional parameter.

Thanks!
Could you also update examples? Add mssql example with timezone specified.
Also, make sure that existing examples works. They should work, but worth checking.

ping @douglasfraser-aviva

authors: antonbabenko douglasfraser-aviva

repo: terraform-aws-modules/terraform-aws-rds


text:
Call to function "element" failed: cannot use element function with an empty list

Hi,
I am trying to destroy everything that i created with terraform but i am getting a new error.
**`Error: Error in function call

  on ../modules/vpc/main.tf line 935, in resource "aws_route_table_association" "private":
 935:   route_table_id = element(
 936:
 937:
 938:
    |----------------
    | aws_route_table.private is empty tuple
    | count.index is 3
    | var.single_nat_gateway is false

Call to function "element" failed: cannot use element function with an empty
list.

Error: Error in function call

  on ../modules/vpc/main.tf line 946, in resource "aws_route_table_association" "database":
 946:     coalescelist(aws_route_table.database.*.id, aws_route_table.private.*.id),
    |----------------
    | aws_route_table.database is empty tuple
    | aws_route_table.private is empty tuple

Call to function "coalescelist" failed: no non-null arguments.

Error: Error in function call

  on ../modules/vpc/main.tf line 946, in resource "aws_route_table_association" "database":
 946:     coalescelist(aws_route_table.database.*.id, aws_route_table.private.*.id),
    |----------------
    | aws_route_table.database is empty tuple
    | aws_route_table.private is empty tuple

Call to function "coalescelist" failed: no non-null arguments.`**

Any idea why this is happening?

+1 I have this same error when trying to change an existing VPC to have multiple NAT Gateways for each AZ.
Before
single_nat_gateway = true
one_nat_gateway_per_az = false

after
single_nat_gateway = false
one_nat_gateway_per_az = true

When running terraform plan I get a similar error due to aws_subnet.public is empty tuple

Getting this as well with Terraform 0.12.24 and provider.aws 2.55 working on creating two AZs in one region, one public subnet per AZ and each with their own NAT gateway. I deleted my network stack to try and resolve it not properly updating the sg-XXXXX identifier from a terraform_remote_state data source, thus erroring out, and have ran into this:
Error: Error in function call

  on network-subnets.tf line 69, in resource "aws_nat_gateway" "gw":
  69:   subnet_id     = element(aws_subnet.public[*].id, count.index)
    |----------------
    | aws_subnet.public is empty tuple
    | count.index is 0

Call to function "element" failed: cannot use element function with an empty
list.

Error: Error in function call

  on network-subnets.tf line 69, in resource "aws_nat_gateway" "gw":
  69:   subnet_id     = element(aws_subnet.public[*].id, count.index)
    |----------------
    | aws_subnet.public is empty tuple
    | count.index is 1

Call to function "element" failed: cannot use element function with an empty
list.
The following was working just fine half an hour ago, creating two subnets and two NAT gateways:
network-subnets.tf
# Create var.az_count public subnets, each in a different AZ
resource "aws_subnet" "public" {
  count                   = var.az_count
  cidr_block              = cidrsubnet(aws_vpc.Rearc.cidr_block, 8, count.index)
  availability_zone       = data.aws_availability_zones.available.names[count.index]
  vpc_id                  = aws_vpc.Rearc.id
  map_public_ip_on_launch = true

  tags = {
    name = "Public Subnet"
    Region = var.aws_region
    Environment = var.environment
  }
}

snip
# Create a NAT gateway with an Elastic IP for each private subnet to get internet connectivity
resource "aws_eip" "gw" {
  count      = var.az_count
  vpc        = true
  depends_on = [aws_internet_gateway.gw]

  tags = {
    Name = "Elastic IP Address"
    Region =var.aws_region
    Environment = var.environment
  }
}

resource "aws_nat_gateway" "gw" {
  count         = var.az_count
  subnet_id     = element(aws_subnet.public[*].id, count.index)
  allocation_id = element(aws_eip.gw[*].id, count.index)

  tags = {
    Name = "NAT Gateway"
    Region = var.aws_region
    Environment = var.environment
  }
}

The only way I was able to resolve this was to delete the terraform.tfstate file in the pertinent subdirectory in its S3 bucket, the accompanying MD5 sum entry in its DynamoDB table, and rebuild from scratch.
I've made a backup of the current network directory if further information is requested.

I guess this will occur in cases where we are trying to create public subnets < number of azs

I guess this will occur in cases where we are trying to create public subnets < number of azs

Nice thought, but I hard-coded 3  AZ's name (I have 3 subnets) and it still gives the error.

I guess this will occur in cases where we are trying to create public subnets < number of azs

Nice thought, but I hard-coded 3 AZ's name (I have 3 subnets) and it still gives the error.

Actually my  hard-coded test probably isn't right.  My original  code is azs             = data.aws_availability_zones.available.names which has count 4 in us-west-2, but I defined only 3 subnets,  hence the error. I will stick with NAT per subnets configuration.

Also getting the same error when standing up a new VPC, with static assignment of 3 AZs and 3 public subnets (one per AZ).  Ideally would like to see 1 NGW per AZ, using the following flags:

single_nat_gateway = false
one_nat_gateway_per_az = true
enable_nat_gateway = true

Getting the following error (Terraform v0.12.26 and AWS ">= 2.28.1"):
`Error: Error in function call
on .terraform/modules/vpc/terraform-aws-vpc-2.6.0/main.tf line 795, in resource "aws_nat_gateway" "this":
795:   subnet_id = element(
796:
797:
798:
|----------------
| aws_subnet.public is empty tuple
| count.index is 2
| var.single_nat_gateway is false
Call to function "element" failed: cannot use element function with an empty
list.
`

I'm getting same error using terragrunt.
inputs = {
  name = "vpc"
  cidr = "10.230.0.0/16"
  azs             = ["us-west-2a", "us-west-2b", "us-west-2c"]
  private_subnets = ["10.230.0.0/20", "10.230.16.0/20", "10.230.32.0/20"]
  public_subnets  = ["10.230.48.0/20", "10.230.64.0/20", "10.230.80.0/20"]
  #single_nat_gateway = true
  enable_nat_gateway   = true
  enable_vpn_gateway   = true #Virtual Private Gateway id=vgw-xxxxxxxxx
  enable_s3_endpoint   = true
  enable_dns_hostnames = true

terragrunt version v0.21.11
Terraform v0.12.20
provider.aws: version = "~> 3.0"
Error: Error in function call
00:51:50
00:51:50    on .terraform/modules/local_vpc/terraform-aws-vpc-2.21.0/main.tf line 905, in resource "aws_route" "private_nat_gateway":
00:51:50   905:   route_table_id         = element(aws_route_table.private.*.id, count.index)
00:51:50      |----------------
00:51:50      | aws_route_table.private is empty tuple
00:51:50      | count.index is 1
00:51:50
00:51:50  Call to function "element" failed: cannot use element function with an empty
00:51:50  list.
00:51:50
00:51:50
00:51:50  Error: Error in function call
00:51:50
00:51:50    on .terraform/modules/local_vpc/terraform-aws-vpc-2.21.0/main.tf line 905, in resource "aws_route" "private_nat_gateway":
00:51:50   905:   route_table_id         = element(aws_route_table.private.*.id, count.index)
00:51:50      |----------------
00:51:50      | aws_route_table.private is empty tuple
00:51:50      | count.index is 2
00:51:50
00:51:50  Call to function "element" failed: cannot use element function with an empty
00:51:50  list.
00:51:50
00:51:50
00:51:50  Error: Error in function call
00:51:50
00:51:50    on .terraform/modules/local_vpc/terraform-aws-vpc-2.21.0/main.tf line 905, in resource "aws_route" "private_nat_gateway":
00:51:50   905:   route_table_id         = element(aws_route_table.private.*.id, count.index)
00:51:50      |----------------
00:51:50      | aws_route_table.private is empty tuple
00:51:50      | count.index is 0
00:51:50
00:51:50  Call to function "element" failed: cannot use element function with an empty
00:51:50  list.
00:51:50
00:51:50
00:51:50  Error: Error in function call
00:51:50
00:51:50    on .terraform/modules/local_vpc/terraform-aws-vpc-2.21.0/main.tf line 929, in resource "aws_route_table_association" "private":
00:51:50   929:   route_table_id = element(
00:51:50   930:
00:51:50   931:
00:51:50   932:
00:51:50      |----------------
00:51:50      | aws_route_table.private is empty tuple
00:51:50      | count.index is 2
00:51:50      | var.single_nat_gateway is false
00:51:50
00:51:50  Call to function "element" failed: cannot use element function with an empty
00:51:50  list.
00:51:50
00:51:50
00:51:50  Error: Error in function call
00:51:50
00:51:50    on .terraform/modules/local_vpc/terraform-aws-vpc-2.21.0/main.tf line 929, in resource "aws_route_table_association" "private":
00:51:50   929:   route_table_id = element(
00:51:50   930:
00:51:50   931:
00:51:50   932:
00:51:50      |----------------
00:51:50      | aws_route_table.private is empty tuple
00:51:50      | count.index is 1
00:51:50      | var.single_nat_gateway is false
00:51:50
00:51:50  Call to function "element" failed: cannot use element function with an empty
00:51:50  list.
00:51:50
00:51:50
00:51:50  Error: Error in function call
00:51:50
00:51:50    on .terraform/modules/local_vpc/terraform-aws-vpc-2.21.0/main.tf line 929, in resource "aws_route_table_association" "private":
00:51:50   929:   route_table_id = element(
00:51:50   930:
00:51:50   931:
00:51:50   932:
00:51:50      |----------------
00:51:50      | aws_route_table.private is empty tuple
00:51:50      | count.index is 0
00:51:50      | var.single_nat_gateway is false
00:51:50
00:51:50  Call to function "element" failed: cannot use element function with an empty
00:51:50  list.
00:51:50
00:51:50
00:51:50  Error: Invalid index
00:51:50
00:51:50    on .terraform/modules/local_vpc/terraform-aws-vpc-2.21.0/main.tf line 989, in resource "aws_route_table_association" "public":
00:51:50   989:   route_table_id = aws_route_table.public[0].id
00:51:50      |----------------
00:51:50      | aws_route_table.public is empty tuple
00:51:50
00:51:50  The given key does not identify an element in this collection value.
00:51:50
00:51:50
00:51:50  Error: Invalid index
00:51:50
00:51:50    on .terraform/modules/local_vpc/terraform-aws-vpc-2.21.0/main.tf line 989, in resource "aws_route_table_association" "public":
00:51:50   989:   route_table_id = aws_route_table.public[0].id
00:51:50      |----------------
00:51:50      | aws_route_table.public is empty tuple
00:51:50
00:51:50  The given key does not identify an element in this collection value.
00:51:50
00:51:50
00:51:50  Error: Invalid index
00:51:50
00:51:50    on .terraform/modules/local_vpc/terraform-aws-vpc-2.21.0/main.tf line 989, in resource "aws_route_table_association" "public":
00:51:50   989:   route_table_id = aws_route_table.public[0].id
00:51:50      |----------------
00:51:50      | aws_route_table.public is empty tuple
00:51:50
00:51:50  The given key does not identify an element in this collection value.

Call to function "element" failed: cannot use element function with an empty list.

The given key does not identify an element in this collection value.

Also trying single_nat_gateway & one_nat_gateway_per_az but still getting same error

You can fix as someone previously mention just delete the  files terraform.tfstate, terraform.tfstate.backup, and run again the plan.
The problem appears because something was deleted outside terraform and the terraform state got desynchronized

I think all of these problems are related, and very hard to fix for all combinations of parameters and flows (create/update).
If problem exists, please provide exact set of arguments you specify to the module, so that we (@terraform-aws-modules/triage-supporters and others) can try to reproduce the exact issue on our end.
Also, try to run configurations in examples/simple-vpc with updated arguments to reduce the scope of an issue in your environment.

We're facing this issue with 2.54.0 and have following errors reported for our DEV environment (which are by definition cut down to absolute minimum):
Error: Error in function call
  on .terraform/modules/core_infrastructure.main_vpc.vpc/vpc-endpoints.tf line 360, in resource "aws_vpc_endpoint" "ecr_api":
 360:   subnet_ids          = coalescelist(var.ecr_api_endpoint_subnet_ids, aws_subnet.private.*.id)
    |----------------
    | aws_subnet.private is empty tuple
    | var.ecr_api_endpoint_subnet_ids is empty list of string
Call to function "coalescelist" failed: no non-null arguments.
Error: Error in function call
  on .terraform/modules/core_infrastructure.main_vpc.vpc/vpc-endpoints.tf line 540, in resource "aws_vpc_endpoint" "monitoring":
 540:   subnet_ids          = coalescelist(var.monitoring_endpoint_subnet_ids, aws_subnet.private.*.id)
    |----------------
    | aws_subnet.private is empty tuple
    | var.monitoring_endpoint_subnet_ids is empty list of string
Call to function "coalescelist" failed: no non-null arguments.

The configuration we set for the module is:
vpc_cidr                   = "10.0.0.0/18"
vpc_az_count_private       = 2 # Need at least 2 for ALBs
vpc_az_count_database      = 2 # Need at least 2 for ALBs
vpc_az_count_public        = 2 # Need at least 2 for RDSs
vpc_enable_nat_gateway     = true
vpc_one_nat_gateway_per_az = false
vpc_single_nat_gateway     = true

The weird thing is the notification that aws_subnet.private is empty tuple, when we explicitely request 2 private subnets.
I also wonder if/how that issue was related to https://github.com/hashicorp/terraform/issues/21370.
Oh, and one more. Our terraform jobs work correctly on 2.48.0. It was the attempted migration to 2.54.0 that causes that issue.
We're using Terraform 0.12.29 AWS Provider 3.8.0.

I am facing similar issue where I provide:
public_subnets       = []

I am facing similar issue where I provide:
public_subnets       = []

NAT gateway resides in the public subnet. Private subnets may have NAT gateway, which makes them also requiring public subnets to be set. public_subnets should not be empty for this reason.
Please provide a complete set of arguments as-is that you pass to this module. It is just impossible to help without seeing code.

NAT gateway resides in the public subnet. Private subnets may have NAT gateway, which makes them also requiring public subnets to be set. public_subnets should not be empty for this reason.
Please provide a complete set of arguments as-is that you pass to this module. It is just impossible to help without seeing code.

@antonbabenko Could you look into this thread? Some people get this problem too.

@jungwookim I wrote before that such issues are very hard to fix for all combinations of parameters and flows (create/update) and the only solution which comes to my mind now is to hint terraform by doing smaller changes at once:

change one argument and apply it, then change another one and apply again
terraform apply -target=module.vpc.aws_nat_gateway (or similar)

Please provide a complete set of arguments as-is that you pass to this module. It is just impossible to help without seeing code.

Debugging invisible configurations is very time-consuming.
I am going to close this issue.

@antonbabenko Thanks for a quick review. That makes sense.

In my case I needed to delete the terraform state file stored in S3

authors: abhishekkanojiaperion antonbabenko daveVPM ivanmb joy-george jungwookim mkielar mluds samuel-elliott surajnarwade xueshanf zakswindow zelfick

repo: terraform-aws-modules/terraform-aws-vpc


text:
failed to download vpc - 3.13.0 (never mind)

Description
updating terraform main.tf with
module "vpc" {
source = "terraform-aws-modules/vpc/aws"
}
and during terraform init
it throws these error
(base) admins-iMac:aws avin$ tf init
Initializing modules...
Downloading registry.terraform.io/terraform-aws-modules/vpc/aws 3.13.0 for vpc...
╷
│ Error: Failed to download module
│
│ Could not download module "vpc" (main.tf:54) source code from
│ "git::https://github.com/terraform-aws-modules/terraform-aws-vpc?ref=v3.13.0": error downloading
│ 'https://github.com/terraform-aws-modules/terraform-aws-vpc?ref=v3.13.0': /usr/bin/git exited with 1: xcrun: error: invalid
│ active developer path (/Library/Developer/CommandLineTools), missing xcrun at:
│ /Library/Developer/CommandLineTools/usr/bin/xcrun
│ .
╵
╷
│ Error: Failed to download module
│
│ Could not download module "vpc" (main.tf:54) source code from
│ "git::https://github.com/terraform-aws-modules/terraform-aws-vpc?ref=v3.13.0": error downloading
│ 'https://github.com/terraform-aws-modules/terraform-aws-vpc?ref=v3.13.0': /usr/bin/git exited with 1: xcrun: error: invalid
│ active developer path (/Library/Developer/CommandLineTools), missing xcrun at:
│ /Library/Developer/CommandLineTools/usr/bin/xcrun
│ .
╵
(base) admins-iMac:aws avin$
⚠ Note
Before you submit an issue, please perform the following first:

Remove the local .terraform directory (! ONLY if state is stored remotely, which hopefully you are following that best practice!): rm -rf .terraform/
Re-initialize the project root to pull down modules: terraform init
Re-attempt your terraform plan or apply and check if the issue still persists

Versions
3.13.0

Terraform:
4.7.0
Provider(s):
aws
Module:

vpc
Reproduction
terraform init
Code Snippet to Reproduce

Expected behavior

Actual behavior

Terminal Output Screenshot(s)

Additional context

I guess its local issue with "git".. after installing git again in my Mac issue got fixed. Thanks


text:
chg: add tags + move output and variables to independent files

Not sure if this will be ideal for this case (such as small module) but I find it more clear and organised. I have move variables and output to independent files and add support to tag variable as per recently on https://github.com/terraform-community-modules/tf_aws_vpc

Thanks, merging.


text:
chore(deps): update common-dev-assets digest to 9470000

This PR contains the following updates:

Package
Update
Change

common-dev-assets
digest
5e148b9 -> 9470000

Configuration
📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.

[ ] If you want to rebase/retry this PR, click this checkbox.

This PR has been generated by Renovate Bot.

:tada: This PR is included in version 1.2.1 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket: