Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Keras 3 and TF 16.1 support #4620

Open
evgri243 opened this issue Apr 17, 2024 · 13 comments
Open

Keras 3 and TF 16.1 support #4620

evgri243 opened this issue Apr 17, 2024 · 13 comments
Labels
enhancement New feature or request

Comments

@evgri243
Copy link

evgri243 commented Apr 17, 2024

TensorFlow seems to be diverging towards Keras 3 after 2.16. Do you have any visibility when TFF may be migrated to Keras 3 as well? We would like to fine-tune a LLama-like model in TFF setting, and its implementation has been completed only in keras-nlp 0.9.3, which is pinned to TF 2.16.1 and Keras 3.

I know migration to Keras 3 is a big way forward even if strictly restricted to TF backends only. A few mentions:

  • TensorFlow Probability as of 2.14 allows Keras 3 to be installed, but internally runs on Keras 2 provided with tf_keras package.
  • TensorFlow Compression passes the tests when forced to Keras 3 with tf_keras installed due to missing imports and TF_USE_LEGACY_KERAS=1 set to influence the behavior of tf.keras module.

Describe the solution you'd like
TFF supports Keras 3 out of the box.

Describe alternatives you've considered
No other easy alternative to use modern models with TFF to my knowledge.

Generally, supporting Keras 3 seems like a good way forward as it is slowly getting populated with popular models. I generally support the initiative and all the work to implement core models there.


Adding @michaelreneer for visibility. @michaelreneer I remember you mentioning goals to clean the dependency tree or at least make it optional. Can this work be of any help here to avoid being blocked by dependencies at least?

@evgri243 evgri243 added the enhancement New feature or request label Apr 17, 2024
@evgri243
Copy link
Author

evgri243 commented Apr 17, 2024

An update on dependencies.

Since 0.24, tensorflow-probability can be installed alongside Keras 3, but requires the now "legacy" tf_keras to be installed as well.
The latest tensorflow-compression 2.16 when forced to TFF 2.16 and Keras 3 requires tf_keras to be installed and additional environment variable TF_USE_LEGACY_KERAS=1 to be set to pass the tests. The variable practically controls whether tf.keras points to Keras 2 or Keras 3.

As far as I understand, both libraries still rely completely on Keras 2, and I wonder if TFF actually cares about what these libraries use (e.g. uses their computation graph) or just rely on their black-boxed functionality.

As for TFF itself, I see heavy dependence on Keras 2 API in implementation, which, as far as I understand, means considerable reimplementation for Keras 3...

Sounds like a dependency hell if you ask me.

@michaelreneer
Copy link
Collaborator

@evgri243

Maybe we can simplify the dependency troubles. Lets brainstorm...

  1. Remove the dependency on tensorflow-compression, I've had this as a low priority todo for a while now.
  2. Update the TF Bazel WORKSPACE dep.
  3. Update the TF Python dep.
  4. Update tensorflow-privacy's TF dependency, https://github.com/tensorflow/privacy/blob/master/setup.py, this may mean updating transient deps:
    1. tensorflow-probability
    2. ...
  5. tensorflow-model-optimization's TF dependency might be fine, https://github.com/tensorflow/model-optimization/blob/master/setup.py
  6. Then there is the usage of keras in TFF that you mentioned.

I think

  • 1 can be decoupled from the rest of the work completely.
  • 2 and 3 are quick and easy and will reveal issues in the Bazel environment and within the Python dependency resolution.
  • 4 and 5 may be very difficult to get all of our dependencies using the new Keras API or it may be very easy. Note I believe that tensorflow-privacy is going to be difficult to update.
  • Regarding 6... after there is a PR with 2 and 3 and all the transient deps are updated, then we should be able to see if there is any runtime issues

Does this somewhat match your thinking?

@evgri243
Copy link
Author

evgri243 commented Apr 22, 2024

Yeah, I guess.

Compression seems easy removable. Apart from a elias_gamma_encode.py that may be hidden behind a conditional import, there is only a weird dependency in worker_binary which I can't find being used even transitively.

I'll try to brute-force transitive dependencies tomorrow to see if we can make it kinda work. I am afraid that Keras 3 claims a public API "compatibility", but I'd guess TFF uses slightly more than public API on the go. And taking all Keras 3 story is about the ubiquitous runtime, I'd assume the graph part being extensively updated. Nevertheless, there is only a single way to find out.

@michaelreneer
Copy link
Collaborator

Yeah I would recommend a few flags I imagine you are not using when trying to test...

      --build_tag_filters="${tag_filters}"
      --test_size_filters=small,medium,large
      --test_timeout_filters=short,moderate,long
      --test_tag_filters="${tag_filters}"

Where tag_filters is:

  • -nokokoro
  • -requires-gpu-nvidia,-requires-jellyfish for CPU
  • requires-gpu-nvidia for GPU
  • -nopresubmit if you want to exclude larger tests that are only run continuously and do not block.

I think you probably want something like this

bazelisk test \
    --build_tag_filters="-nokokoro,-requires-gpu-nvidia,-requires-jellyfish,-nopresubmit" \
    --test_size_filters="small,medium,large" \
    --test_timeout_filters="short,moderate,long" \
    --test_tag_filters="-nokokoro,-requires-gpu-nvidia,-requires-jellyfish,-nopresubmit" \
    //tensorflow_federated/...

@evgri243
Copy link
Author

evgri243 commented Apr 23, 2024

@michaelreneer Thanks for the filters! it works with them on main as a baseline.

Small status update. It seems like usage of Compression and Privacy are quite limited to gamma Elias Gamma and Differential Privacy. After some consideration, I just removed them from dependencies now to see how the main body is affected by Keras.

Well, TF 2.16.1 made a few major changes to Bazel dependencies, which I'm still trying to figure out. If interested, the latest for today is here: https://github.com/evgri243/tensorflow-federated/tree/evgri243/keras3-support Not much yet, stabilizing the build.

It seems like there is a story around grpc in WORKSAPCE file, so that, just to ask: any chance it looks familiar? Otherwise, I'll continue exploring what has actually changed.

`# bazel test //tensorflow_federated/...` (click to open)
WARNING: The following configs were expanded more than once: [v2]. For repeatable flags, repeats are counted twice and may lead to unexpected behavior.
INFO: Reading 'startup' options from /mnt/jetbrains/work/tensorflow-federated/.bazelrc: --host_jvm_args=-Dbazel.DigestFunction=SHA256
INFO: Options provided by the client:
  Inherited 'common' options: --isatty=1 --terminal_columns=171
INFO: Reading rc options for 'test' from /mnt/jetbrains/work/tensorflow-federated/.bazelrc:
  Inherited 'common' options: --announce_rc --enable_platform_specific_config --experimental_repo_remote_exec
INFO: Reading rc options for 'test' from /mnt/jetbrains/work/tensorflow-federated/.bazelrc:
  Inherited 'build' options: --verbose_failures --spawn_strategy=local --compilation_mode=opt --define=allow_oversize_protos=true --copt=-march=haswell --host_copt=-march=haswell --copt=-O3 --define=grpc_no_ares=true --noincompatible_remove_legacy_whole_archive --define=with_xla_support=true --config=short_logs --config=v2 --define=no_aws_support=true --define=no_hdfs_support=true --experimental_cc_shared_library --experimental_link_static_libraries_once=false --config=v2 --cxxopt=-D_GLIBCXX_USE_CXX11_ABI=1 --define=build_with_onednn_v2=true --build_tag_filters=-nokokoro,-requires-gpu-nvidia,-requires-jellyfish,-nopresubmit
INFO: Reading rc options for 'test' from /mnt/jetbrains/work/tensorflow-federated/.bazelrc:
  'test' options: --test_output=errors --test_summary=detailed --test_tag_filters=-nokokoro,-requires-gpu-nvidia,-requires-jellyfish,-nopresubmit --test_size_filters=small,medium,large --test_timeout_filters=short,moderate,long --test_tag_filters=-nokokoro,-requires-gpu-nvidia,-requires-jellyfish,-nopresubmit
INFO: Found applicable config definition build:short_logs in file /mnt/jetbrains/work/tensorflow-federated/.bazelrc: --output_filter=DONT_MATCH_ANYTHING
INFO: Found applicable config definition build:v2 in file /mnt/jetbrains/work/tensorflow-federated/.bazelrc: --define=tf_api_version=2 --action_env=TF2_BEHAVIOR=1
INFO: Found applicable config definition build:v2 in file /mnt/jetbrains/work/tensorflow-federated/.bazelrc: --define=tf_api_version=2 --action_env=TF2_BEHAVIOR=1
INFO: Found applicable config definition build:linux in file /mnt/jetbrains/work/tensorflow-federated/.bazelrc: --copt=-w --host_copt=-w --define=PREFIX=/usr --define=LIBDIR=$(PREFIX)/lib --define=INCLUDEDIR=$(PREFIX)/include --define=PROTOBUF_INCLUDE_PATH=$(PREFIX)/include --cxxopt=-std=c++17 --host_cxxopt=-std=c++17 --experimental_guard_against_concurrent_changes
WARNING: The following configs were expanded more than once: [v2]. For repeatable flags, repeats are counted twice and may lead to unexpected behavior.
INFO: Analyzed 681 targets (28 packages loaded, 9190 targets configured).
INFO: Found 422 targets and 259 test targets...
ERROR: /root/.cache/bazel/_bazel_root/f9c2c3654392974eb9cabda3d8ebefac/external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/BUILD.bazel:5:12: Executing genrule @com_github_grpc_grpc//src/python/grpcio/grpc/_cython:cygrpc.pyx_cython_translation failed: (Exit 1): bash failed: error executing command (from target @com_github_grpc_grpc//src/python/grpcio/grpc/_cython:cygrpc.pyx_cython_translation) 
  (cd /root/.cache/bazel/_bazel_root/f9c2c3654392974eb9cabda3d8ebefac/execroot/org_tensorflow_federated && \
  exec env - \
    PATH=/root/.cache/bazelisk/downloads/sha256/a40ac69263440761199fcb8da47ad4e3f328cbe79ffbf4ecc14e5ba252857307/bin:/mnt/jetbrains/work/tensorflow-federated/.venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/mnt/jetbrains/system/bin \
    TF2_BEHAVIOR=1 \
  /bin/bash -c 'source external/bazel_tools/tools/genrule/genrule-setup.sh; PYTHONHASHSEED=0 bazel-out/k8-opt-exec-50AE0418/bin/external/cython/cython_binary --cplus external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/cygrpc.pyx --output-file bazel-out/k8-opt/bin/external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/cygrpc.cpp')
# Configuration: 9558a6e0a1ca24da15b434b41828e84c814f8adea5c3bc783ba89ad84712f971
# Execution platform: @local_execution_config_platform//:platform
/root/.cache/bazel/_bazel_root/f9c2c3654392974eb9cabda3d8ebefac/external/cython/Cython/Compiler/Main.py:381: FutureWarning: Cython directive 'language_level' not set, using '3str' for now (Py3). This has changed from earlier releases! File: /root/.cache/bazel/_bazel_root/f9c2c3654392974eb9cabda3d8ebefac/execroot/org_tensorflow_federated/external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/cygrpc.pxd
  tree = Parsing.p_module(s, pxd, full_module_name)
warning: external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/cygrpc.pxd:39:0: The 'IF' statement is deprecated and will be removed in a future Cython version. Consider using runtime conditions or C macros instead. See https://github.com/cython/cython/issues/4310
warning: external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/cygrpc.pyx:53:0: The 'IF' statement is deprecated and will be removed in a future Cython version. Consider using runtime conditions or C macros instead. See https://github.com/cython/cython/issues/4310
performance hint: external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/credentials.pyx.pxi:60:5: Exception check on '_destroy' will always require the GIL to be acquired. Possible solutions:
        1. Declare the function as 'noexcept' if you control the definition and you're sure you don't want the function to raise exceptions.
        2. Use an 'int' return type on the function to allow an error code to be returned.
performance hint: external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/credentials.pyx.pxi:296:5: Exception check on '_server_cert_config_fetcher_wrapper' will always require the GIL to be acquired. Possible solutions:
        1. Declare the function as 'noexcept' if you control the definition and you're sure you don't want the function to raise exceptions.

performance hint: external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/records.pyx.pxi:21:5: Exception check on '_copy_slice' will always require the GIL to be acquired. Possible solutions:
        1. Declare the function as 'noexcept' if you control the definition and you're sure you don't want the function to raise exceptions.

performance hint: external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/records.pyx.pxi:26:5: Exception check on '_slice_from_bytes' will always require the GIL to be acquired. Possible solutions:
        1. Declare the function as 'noexcept' if you control the definition and you're sure you don't want the function to raise exceptions.

performance hint: external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/security.pyx.pxi:20:5: Exception check on 'ssl_roots_override_callback' will always require the GIL to be acquired. Possible solutions:
        1. Declare the function as 'noexcept' if you control the definition and you're sure you don't want the function to raise exceptions.

performance hint: external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/grpc_gevent.pyx.pxi:71:5: Exception check on 'socket_connect' will always require the GIL to be acquired. Possible solutions:
        1. Declare the function as 'noexcept' if you control the definition and you're sure you don't want the function to raise exceptions.
        2. Use an 'int' return type on the function to allow an error code to be returned.
performance hint: external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/grpc_gevent.pyx.pxi:86:5: Exception check on 'socket_destroy' will always require the GIL to be acquired. Possible solutions:
        1. Declare the function as 'noexcept' if you control the definition and you're sure you don't want the function to raise exceptions.
        2. Use an 'int' return type on the function to allow an error code to be returned.
performance hint: external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/grpc_gevent.pyx.pxi:89:5: Exception check on 'socket_shutdown' will always require the GIL to be acquired. Possible solutions:
        1. Declare the function as 'noexcept' if you control the definition and you're sure you don't want the function to raise exceptions.
        2. Use an 'int' return type on the function to allow an error code to be returned.
performance hint: external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/grpc_gevent.pyx.pxi:96:5: Exception check on 'socket_close' will always require the GIL to be acquired. Possible solutions:
        1. Declare the function as 'noexcept' if you control the definition and you're sure you don't want the function to raise exceptions.
        2. Use an 'int' return type on the function to allow an error code to be returned.
performance hint: external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/grpc_gevent.pyx.pxi:136:5: Exception check on 'socket_write' will always require the GIL to be acquired. Possible solutions:
        1. Declare the function as 'noexcept' if you control the definition and you're sure you don't want the function to raise exceptions.
        2. Use an 'int' return type on the function to allow an error code to be returned.
performance hint: external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/grpc_gevent.pyx.pxi:164:5: Exception check on 'socket_read' will always require the GIL to be acquired. Possible solutions:
        1. Declare the function as 'noexcept' if you control the definition and you're sure you don't want the function to raise exceptions.
        2. Use an 'int' return type on the function to allow an error code to be returned.
performance hint: external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/grpc_gevent.pyx.pxi:252:5: Exception check on 'socket_accept' will always require the GIL to be acquired. Possible solutions:
        1. Declare the function as 'noexcept' if you control the definition and you're sure you don't want the function to raise exceptions.
        2. Use an 'int' return type on the function to allow an error code to be returned.
performance hint: external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/grpc_gevent.pyx.pxi:287:5: Exception check on 'socket_resolve_async' will always require the GIL to be acquired. Possible solutions:
        1. Declare the function as 'noexcept' if you control the definition and you're sure you don't want the function to raise exceptions.
        2. Use an 'int' return type on the function to allow an error code to be returned.
performance hint: external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/grpc_gevent.pyx.pxi:329:5: Exception check on 'timer_start' will always require the GIL to be acquired. Possible solutions:
        1. Declare the function as 'noexcept' if you control the definition and you're sure you don't want the function to raise exceptions.
        2. Use an 'int' return type on the function to allow an error code to be returned.
performance hint: external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/grpc_gevent.pyx.pxi:335:5: Exception check on 'timer_stop' will always require the GIL to be acquired. Possible solutions:
        1. Declare the function as 'noexcept' if you control the definition and you're sure you don't want the function to raise exceptions.
        2. Use an 'int' return type on the function to allow an error code to be returned.
performance hint: external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/grpc_gevent.pyx.pxi:343:5: Exception check on 'init_loop' will always require the GIL to be acquired. Possible solutions:
        1. Declare the function as 'noexcept' if you control the definition and you're sure you don't want the function to raise exceptions.
        2. Use an 'int' return type on the function to allow an error code to be returned.
performance hint: external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/grpc_gevent.pyx.pxi:346:5: Exception check on 'destroy_loop' will always require the GIL to be acquired. Possible solutions:
        1. Declare the function as 'noexcept' if you control the definition and you're sure you don't want the function to raise exceptions.
        2. Use an 'int' return type on the function to allow an error code to be returned.
performance hint: external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/grpc_gevent.pyx.pxi:349:5: Exception check on 'kick_loop' will always require the GIL to be acquired. Possible solutions:
        1. Declare the function as 'noexcept' if you control the definition and you're sure you don't want the function to raise exceptions.
        2. Use an 'int' return type on the function to allow an error code to be returned.
performance hint: external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/grpc_gevent.pyx.pxi:352:5: Exception check on 'run_loop' will always require the GIL to be acquired. Possible solutions:
        1. Declare the function as 'noexcept' if you control the definition and you're sure you don't want the function to raise exceptions.
        2. Use an 'int' return type on the function to allow an error code to be returned.
performance hint: external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/fork_posix.pyx.pxi:42:5: Exception check on '__prefork' will always require the GIL to be acquired. Possible solutions:
        1. Declare the function as 'noexcept' if you control the definition and you're sure you don't want the function to raise exceptions.
        2. Use an 'int' return type on the function to allow an error code to be returned.
performance hint: external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/fork_posix.pyx.pxi:56:5: Exception check on '__postfork_parent' will always require the GIL to be acquired. Possible solutions:
        1. Declare the function as 'noexcept' if you control the definition and you're sure you don't want the function to raise exceptions.
        2. Use an 'int' return type on the function to allow an error code to be returned.
performance hint: external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/fork_posix.pyx.pxi:63:5: Exception check on '__postfork_child' will always require the GIL to be acquired. Possible solutions:
        1. Declare the function as 'noexcept' if you control the definition and you're sure you don't want the function to raise exceptions.
        2. Use an 'int' return type on the function to allow an error code to be returned.
performance hint: external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/aio/iomgr/iomgr.pyx.pxi:40:5: Exception check on 'asyncio_socket_destroy' will always require the GIL to be acquired. Possible solutions:
        1. Declare the function as 'noexcept' if you control the definition and you're sure you don't want the function to raise exceptions.
        2. Use an 'int' return type on the function to allow an error code to be returned.
performance hint: external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/aio/iomgr/iomgr.pyx.pxi:44:5: Exception check on 'asyncio_socket_connect' will always require the GIL to be acquired. Possible solutions:
        1. Declare the function as 'noexcept' if you control the definition and you're sure you don't want the function to raise exceptions.
        2. Use an 'int' return type on the function to allow an error code to be returned.
performance hint: external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/aio/iomgr/iomgr.pyx.pxi:55:5: Exception check on 'asyncio_socket_close' will always require the GIL to be acquired. Possible solutions:
        1. Declare the function as 'noexcept' if you control the definition and you're sure you don't want the function to raise exceptions.
        2. Use an 'int' return type on the function to allow an error code to be returned.
performance hint: external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/aio/iomgr/iomgr.pyx.pxi:63:5: Exception check on 'asyncio_socket_shutdown' will always require the GIL to be acquired. Possible solutions:
        1. Declare the function as 'noexcept' if you control the definition and you're sure you don't want the function to raise exceptions.
        2. Use an 'int' return type on the function to allow an error code to be returned.
performance hint: external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/aio/iomgr/iomgr.pyx.pxi:68:5: Exception check on 'asyncio_socket_write' will always require the GIL to be acquired. Possible solutions:
        1. Declare the function as 'noexcept' if you control the definition and you're sure you don't want the function to raise exceptions.
        2. Use an 'int' return type on the function to allow an error code to be returned.
performance hint: external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/aio/iomgr/iomgr.pyx.pxi:76:5: Exception check on 'asyncio_socket_read' will always require the GIL to be acquired. Possible solutions:
        1. Declare the function as 'noexcept' if you control the definition and you're sure you don't want the function to raise exceptions.
        2. Use an 'int' return type on the function to allow an error code to be returned.
performance hint: external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/aio/iomgr/iomgr.pyx.pxi:155:5: Exception check on 'asyncio_socket_accept' will always require the GIL to be acquired. Possible solutions:
        1. Declare the function as 'noexcept' if you control the definition and you're sure you don't want the function to raise exceptions.
        2. Use an 'int' return type on the function to allow an error code to be returned.
performance hint: external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/aio/iomgr/iomgr.pyx.pxi:170:5: Exception check on 'asyncio_resolve_async' will always require the GIL to be acquired. Possible solutions:
        1. Declare the function as 'noexcept' if you control the definition and you're sure you don't want the function to raise exceptions.
        2. Use an 'int' return type on the function to allow an error code to be returned.
performance hint: external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/aio/iomgr/iomgr.pyx.pxi:178:5: Exception check on 'asyncio_timer_start' will always require the GIL to be acquired. Possible solutions:
        1. Declare the function as 'noexcept' if you control the definition and you're sure you don't want the function to raise exceptions.
        2. Use an 'int' return type on the function to allow an error code to be returned.
performance hint: external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/aio/iomgr/iomgr.pyx.pxi:184:5: Exception check on 'asyncio_timer_stop' will always require the GIL to be acquired. Possible solutions:
        1. Declare the function as 'noexcept' if you control the definition and you're sure you don't want the function to raise exceptions.
        2. Use an 'int' return type on the function to allow an error code to be returned.
performance hint: external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/aio/iomgr/iomgr.pyx.pxi:190:5: Exception check on 'asyncio_init_loop' will always require the GIL to be acquired. Possible solutions:
        1. Declare the function as 'noexcept' if you control the definition and you're sure you don't want the function to raise exceptions.
        2. Use an 'int' return type on the function to allow an error code to be returned.
performance hint: external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/aio/iomgr/iomgr.pyx.pxi:194:5: Exception check on 'asyncio_destroy_loop' will always require the GIL to be acquired. Possible solutions:
        1. Declare the function as 'noexcept' if you control the definition and you're sure you don't want the function to raise exceptions.
        2. Use an 'int' return type on the function to allow an error code to be returned.
performance hint: external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/aio/iomgr/iomgr.pyx.pxi:198:5: Exception check on 'asyncio_kick_loop' will always require the GIL to be acquired. Possible solutions:
        1. Declare the function as 'noexcept' if you control the definition and you're sure you don't want the function to raise exceptions.
        2. Use an 'int' return type on the function to allow an error code to be returned.
performance hint: external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/aio/iomgr/iomgr.pyx.pxi:202:5: Exception check on 'asyncio_run_loop' will always require the GIL to be acquired. Possible solutions:
        1. Declare the function as 'noexcept' if you control the definition and you're sure you don't want the function to raise exceptions.
        2. Use an 'int' return type on the function to allow an error code to be returned.

Error compiling Cython file:
------------------------------------------------------------
...
    return 1
  else:
    return 0

cdef grpc_arg_pointer_vtable default_vtable
default_vtable.copy = &_copy_pointer
                      ^
------------------------------------------------------------

external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/vtable.pyx.pxi:34:22: Cannot assign type 'void *(*)(void *) except? NULL' to 'void *(*)(void *) noexcept'. Exception values are incompatible. Suggest adding 'noexcept' to type 'void *(void *) except? NULL'.

Error compiling Cython file:
------------------------------------------------------------
...
  else:
    return 0

cdef grpc_arg_pointer_vtable default_vtable
default_vtable.copy = &_copy_pointer
default_vtable.destroy = &_destroy_pointer
                         ^
------------------------------------------------------------

external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/vtable.pyx.pxi:35:25: Cannot assign type 'void (*)(void *) except *' to 'void (*)(void *) noexcept'. Exception values are incompatible. Suggest adding 'noexcept' to type 'void (void *) except *'.

Error compiling Cython file:
------------------------------------------------------------
...
    return 0

cdef grpc_arg_pointer_vtable default_vtable
default_vtable.copy = &_copy_pointer
default_vtable.destroy = &_destroy_pointer
default_vtable.cmp = &_compare_pointer
                     ^
------------------------------------------------------------

external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/vtable.pyx.pxi:36:21: Cannot assign type 'int (*)(void *, void *) except? -1' to 'int (*)(void *, void *) noexcept'. Exception values are incompatible. Suggest adding 'noexcept' to type 'int (void *, void *) except? -1'.

Error compiling Cython file:
------------------------------------------------------------
...
  cdef grpc_ssl_server_credentials_options* c_options = NULL
  c_options = grpc_ssl_server_credentials_create_options_using_config_fetcher(
    GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_AND_VERIFY
    if force_client_auth else
    GRPC_SSL_DONT_REQUEST_CLIENT_CERTIFICATE,
    _server_cert_config_fetcher_wrapper,
    ^
------------------------------------------------------------

external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/credentials.pyx.pxi:290:4: Cannot assign type 'grpc_ssl_certificate_config_reload_status (void *, grpc_ssl_server_certificate_config **) except * nogil' to 'grpc_ssl_server_certificate_config_callback'. Exception values are incompatible. Suggest adding 'noexcept' to type 'grpc_ssl_certificate_config_reload_status (void *, grpc_ssl_server_certificate_config **) except * nogil'.

Error compiling Cython file:
------------------------------------------------------------
...

  def cb_func(cb, args):
    _spawn_greenlet(cb, *args)
  set_async_callback_func(cb_func)

  gevent_resolver_vtable.resolve = socket_resolve
                                   ^
------------------------------------------------------------

external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/grpc_gevent.pyx.pxi:392:35: Cannot assign type 'grpc_error *(char *, char *, grpc_resolved_addresses **) except? NULL nogil' to 'grpc_error *(*)(char *, char *, grpc_resolved_addresses **) noexcept'. Exception values are incompatible. Suggest adding 'noexcept' to type 'grpc_error *(char *, char *, grpc_resolved_addresses **) except? NULL nogil'.

Error compiling Cython file:
------------------------------------------------------------
...
  def cb_func(cb, args):
    _spawn_greenlet(cb, *args)
  set_async_callback_func(cb_func)

  gevent_resolver_vtable.resolve = socket_resolve
  gevent_resolver_vtable.resolve_async = socket_resolve_async
                                         ^
------------------------------------------------------------

external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/grpc_gevent.pyx.pxi:393:41: Cannot assign type 'void (grpc_custom_resolver *, char *, char *) except * nogil' to 'void (*)(grpc_custom_resolver *, char *, char *) noexcept'. Exception values are incompatible. Suggest adding 'noexcept' to type 'void (grpc_custom_resolver *, char *, char *) except * nogil'.

Error compiling Cython file:
------------------------------------------------------------
...
  set_async_callback_func(cb_func)

  gevent_resolver_vtable.resolve = socket_resolve
  gevent_resolver_vtable.resolve_async = socket_resolve_async

  gevent_socket_vtable.init = socket_init
                              ^
------------------------------------------------------------

external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/grpc_gevent.pyx.pxi:395:30: Cannot assign type 'grpc_error *(grpc_custom_socket *, int) except? NULL nogil' to 'grpc_error *(*)(grpc_custom_socket *, int) noexcept'. Exception values are incompatible. Suggest adding 'noexcept' to type 'grpc_error *(grpc_custom_socket *, int) except? NULL nogil'.

Error compiling Cython file:
------------------------------------------------------------
...

  gevent_resolver_vtable.resolve = socket_resolve
  gevent_resolver_vtable.resolve_async = socket_resolve_async

  gevent_socket_vtable.init = socket_init
  gevent_socket_vtable.connect = socket_connect
                                 ^
------------------------------------------------------------

external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/grpc_gevent.pyx.pxi:396:33: Cannot assign type 'void (grpc_custom_socket *, const grpc_sockaddr *, size_t, grpc_custom_connect_callback) except * nogil' to 'void (*)(grpc_custom_socket *, const grpc_sockaddr *, size_t, grpc_custom_connect_callback) noexcept'. Exception values are incompatible. Suggest adding 'noexcept' to type 'void (grpc_custom_socket *, const grpc_sockaddr *, size_t, grpc_custom_connect_callback) except * nogil'.

Error compiling Cython file:
------------------------------------------------------------
...
  gevent_resolver_vtable.resolve = socket_resolve
  gevent_resolver_vtable.resolve_async = socket_resolve_async

  gevent_socket_vtable.init = socket_init
  gevent_socket_vtable.connect = socket_connect
  gevent_socket_vtable.destroy = socket_destroy
                                 ^
------------------------------------------------------------

external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/grpc_gevent.pyx.pxi:397:33: Cannot assign type 'void (grpc_custom_socket *) except * nogil' to 'void (*)(grpc_custom_socket *) noexcept'. Exception values are incompatible. Suggest adding 'noexcept' to type 'void (grpc_custom_socket *) except * nogil'.

Error compiling Cython file:
------------------------------------------------------------
...
  gevent_resolver_vtable.resolve_async = socket_resolve_async

  gevent_socket_vtable.init = socket_init
  gevent_socket_vtable.connect = socket_connect
  gevent_socket_vtable.destroy = socket_destroy
  gevent_socket_vtable.shutdown = socket_shutdown
                                  ^
------------------------------------------------------------

external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/grpc_gevent.pyx.pxi:398:34: Cannot assign type 'void (grpc_custom_socket *) except * nogil' to 'void (*)(grpc_custom_socket *) noexcept'. Exception values are incompatible. Suggest adding 'noexcept' to type 'void (grpc_custom_socket *) except * nogil'.

Error compiling Cython file:
------------------------------------------------------------
...

  gevent_socket_vtable.init = socket_init
  gevent_socket_vtable.connect = socket_connect
  gevent_socket_vtable.destroy = socket_destroy
  gevent_socket_vtable.shutdown = socket_shutdown
  gevent_socket_vtable.close = socket_close
                               ^
------------------------------------------------------------

external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/grpc_gevent.pyx.pxi:399:31: Cannot assign type 'void (grpc_custom_socket *, grpc_custom_close_callback) except * nogil' to 'void (*)(grpc_custom_socket *, grpc_custom_close_callback) noexcept'. Exception values are incompatible. Suggest adding 'noexcept' to type 'void (grpc_custom_socket *, grpc_custom_close_callback) except * nogil'.

Error compiling Cython file:
------------------------------------------------------------
...
  gevent_socket_vtable.init = socket_init
  gevent_socket_vtable.connect = socket_connect
  gevent_socket_vtable.destroy = socket_destroy
  gevent_socket_vtable.shutdown = socket_shutdown
  gevent_socket_vtable.close = socket_close
  gevent_socket_vtable.write = socket_write
                               ^
------------------------------------------------------------

external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/grpc_gevent.pyx.pxi:400:31: Cannot assign type 'void (grpc_custom_socket *, grpc_slice_buffer *, grpc_custom_write_callback) except * nogil' to 'void (*)(grpc_custom_socket *, grpc_slice_buffer *, grpc_custom_write_callback) noexcept'. Exception values are incompatible. Suggest adding 'noexcept' to type 'void (grpc_custom_socket *, grpc_slice_buffer *, grpc_custom_write_callback) except * nogil'.

Error compiling Cython file:
------------------------------------------------------------
...
  gevent_socket_vtable.connect = socket_connect
  gevent_socket_vtable.destroy = socket_destroy
  gevent_socket_vtable.shutdown = socket_shutdown
  gevent_socket_vtable.close = socket_close
  gevent_socket_vtable.write = socket_write
  gevent_socket_vtable.read = socket_read
                              ^
------------------------------------------------------------

external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/grpc_gevent.pyx.pxi:401:30: Cannot assign type 'void (grpc_custom_socket *, char *, size_t, grpc_custom_read_callback) except * nogil' to 'void (*)(grpc_custom_socket *, char *, size_t, grpc_custom_read_callback) noexcept'. Exception values are incompatible. Suggest adding 'noexcept' to type 'void (grpc_custom_socket *, char *, size_t, grpc_custom_read_callback) except * nogil'.

Error compiling Cython file:
------------------------------------------------------------
...
  gevent_socket_vtable.destroy = socket_destroy
  gevent_socket_vtable.shutdown = socket_shutdown
  gevent_socket_vtable.close = socket_close
  gevent_socket_vtable.write = socket_write
  gevent_socket_vtable.read = socket_read
  gevent_socket_vtable.getpeername = socket_getpeername
                                     ^
------------------------------------------------------------

external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/grpc_gevent.pyx.pxi:402:37: Cannot assign type 'grpc_error *(grpc_custom_socket *, const grpc_sockaddr *, int *) except? NULL nogil' to 'grpc_error *(*)(grpc_custom_socket *, const grpc_sockaddr *, int *) noexcept'. Exception values are incompatible. Suggest adding 'noexcept' to type 'grpc_error *(grpc_custom_socket *, const grpc_sockaddr *, int *) except? NULL nogil'.

Error compiling Cython file:
------------------------------------------------------------
...
  gevent_socket_vtable.shutdown = socket_shutdown
  gevent_socket_vtable.close = socket_close
  gevent_socket_vtable.write = socket_write
  gevent_socket_vtable.read = socket_read
  gevent_socket_vtable.getpeername = socket_getpeername
  gevent_socket_vtable.getsockname = socket_getsockname
                                     ^
------------------------------------------------------------

external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/grpc_gevent.pyx.pxi:403:37: Cannot assign type 'grpc_error *(grpc_custom_socket *, const grpc_sockaddr *, int *) except? NULL nogil' to 'grpc_error *(*)(grpc_custom_socket *, const grpc_sockaddr *, int *) noexcept'. Exception values are incompatible. Suggest adding 'noexcept' to type 'grpc_error *(grpc_custom_socket *, const grpc_sockaddr *, int *) except? NULL nogil'.

Error compiling Cython file:
------------------------------------------------------------
...
  gevent_socket_vtable.close = socket_close
  gevent_socket_vtable.write = socket_write
  gevent_socket_vtable.read = socket_read
  gevent_socket_vtable.getpeername = socket_getpeername
  gevent_socket_vtable.getsockname = socket_getsockname
  gevent_socket_vtable.bind = socket_bind
                              ^
------------------------------------------------------------

external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/grpc_gevent.pyx.pxi:404:30: Cannot assign type 'grpc_error *(grpc_custom_socket *, const grpc_sockaddr *, size_t, int) except? NULL nogil' to 'grpc_error *(*)(grpc_custom_socket *, const grpc_sockaddr *, size_t, int) noexcept'. Exception values are incompatible. Suggest adding 'noexcept' to type 'grpc_error *(grpc_custom_socket *, const grpc_sockaddr *, size_t, int) except? NULL nogil'.

Error compiling Cython file:
------------------------------------------------------------
...
  gevent_socket_vtable.write = socket_write
  gevent_socket_vtable.read = socket_read
  gevent_socket_vtable.getpeername = socket_getpeername
  gevent_socket_vtable.getsockname = socket_getsockname
  gevent_socket_vtable.bind = socket_bind
  gevent_socket_vtable.listen = socket_listen
                                ^
------------------------------------------------------------

external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/grpc_gevent.pyx.pxi:405:32: Cannot assign type 'grpc_error *(grpc_custom_socket *) except? NULL nogil' to 'grpc_error *(*)(grpc_custom_socket *) noexcept'. Exception values are incompatible. Suggest adding 'noexcept' to type 'grpc_error *(grpc_custom_socket *) except? NULL nogil'.

Error compiling Cython file:
------------------------------------------------------------
...
  gevent_socket_vtable.read = socket_read
  gevent_socket_vtable.getpeername = socket_getpeername
  gevent_socket_vtable.getsockname = socket_getsockname
  gevent_socket_vtable.bind = socket_bind
  gevent_socket_vtable.listen = socket_listen
  gevent_socket_vtable.accept = socket_accept
                                ^
------------------------------------------------------------

external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/grpc_gevent.pyx.pxi:406:32: Cannot assign type 'void (grpc_custom_socket *, grpc_custom_socket *, grpc_custom_accept_callback) except * nogil' to 'void (*)(grpc_custom_socket *, grpc_custom_socket *, grpc_custom_accept_callback) noexcept'. Exception values are incompatible. Suggest adding 'noexcept' to type 'void (grpc_custom_socket *, grpc_custom_socket *, grpc_custom_accept_callback) except * nogil'.

Error compiling Cython file:
------------------------------------------------------------
...
  gevent_socket_vtable.getsockname = socket_getsockname
  gevent_socket_vtable.bind = socket_bind
  gevent_socket_vtable.listen = socket_listen
  gevent_socket_vtable.accept = socket_accept

  gevent_timer_vtable.start = timer_start
                              ^
------------------------------------------------------------

external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/grpc_gevent.pyx.pxi:408:30: Cannot assign type 'void (grpc_custom_timer *) except * nogil' to 'void (*)(grpc_custom_timer *) noexcept'. Exception values are incompatible. Suggest adding 'noexcept' to type 'void (grpc_custom_timer *) except * nogil'.

Error compiling Cython file:
------------------------------------------------------------
...
  gevent_socket_vtable.bind = socket_bind
  gevent_socket_vtable.listen = socket_listen
  gevent_socket_vtable.accept = socket_accept

  gevent_timer_vtable.start = timer_start
  gevent_timer_vtable.stop = timer_stop
                             ^
------------------------------------------------------------

external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/grpc_gevent.pyx.pxi:409:29: Cannot assign type 'void (grpc_custom_timer *) except * nogil' to 'void (*)(grpc_custom_timer *) noexcept'. Exception values are incompatible. Suggest adding 'noexcept' to type 'void (grpc_custom_timer *) except * nogil'.

Error compiling Cython file:
------------------------------------------------------------
...
  gevent_socket_vtable.accept = socket_accept

  gevent_timer_vtable.start = timer_start
  gevent_timer_vtable.stop = timer_stop

  gevent_pollset_vtable.init = init_loop
                               ^
------------------------------------------------------------

external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/grpc_gevent.pyx.pxi:411:31: Cannot assign type 'void (void) except * nogil' to 'void (*)(void) noexcept'. Exception values are incompatible. Suggest adding 'noexcept' to type 'void (void) except * nogil'.

Error compiling Cython file:
------------------------------------------------------------
...

  gevent_timer_vtable.start = timer_start
  gevent_timer_vtable.stop = timer_stop

  gevent_pollset_vtable.init = init_loop
  gevent_pollset_vtable.poll = run_loop
                               ^
------------------------------------------------------------

external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/grpc_gevent.pyx.pxi:412:31: Cannot assign type 'void (size_t) except * nogil' to 'void (*)(size_t) noexcept'. Exception values are incompatible. Suggest adding 'noexcept' to type 'void (size_t) except * nogil'.

Error compiling Cython file:
------------------------------------------------------------
...
  gevent_timer_vtable.start = timer_start
  gevent_timer_vtable.stop = timer_stop

  gevent_pollset_vtable.init = init_loop
  gevent_pollset_vtable.poll = run_loop
  gevent_pollset_vtable.kick = kick_loop
                               ^
------------------------------------------------------------

external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/grpc_gevent.pyx.pxi:413:31: Cannot assign type 'void (void) except * nogil' to 'void (*)(void) noexcept'. Exception values are incompatible. Suggest adding 'noexcept' to type 'void (void) except * nogil'.

Error compiling Cython file:
------------------------------------------------------------
...
  gevent_timer_vtable.stop = timer_stop

  gevent_pollset_vtable.init = init_loop
  gevent_pollset_vtable.poll = run_loop
  gevent_pollset_vtable.kick = kick_loop
  gevent_pollset_vtable.shutdown = destroy_loop
                                   ^
------------------------------------------------------------

external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/grpc_gevent.pyx.pxi:414:35: Cannot assign type 'void (void) except * nogil' to 'void (*)(void) noexcept'. Exception values are incompatible. Suggest adding 'noexcept' to type 'void (void) except * nogil'.

Error compiling Cython file:
------------------------------------------------------------
...
def fork_handlers_and_grpc_init():
    grpc_init()
    if _GRPC_ENABLE_FORK_SUPPORT:
        with _fork_state.fork_handler_registered_lock:
            if not _fork_state.fork_handler_registered:
                pthread_atfork(&__prefork, &__postfork_parent, &__postfork_child)
                               ^
------------------------------------------------------------

external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/fork_posix.pyx.pxi:98:31: Cannot assign type 'void (*)(void) except * nogil' to 'void (*)(void) noexcept nogil'. Exception values are incompatible. Suggest adding 'noexcept' to type 'void (void) except * nogil'.

Error compiling Cython file:
------------------------------------------------------------
...
def fork_handlers_and_grpc_init():
    grpc_init()
    if _GRPC_ENABLE_FORK_SUPPORT:
        with _fork_state.fork_handler_registered_lock:
            if not _fork_state.fork_handler_registered:
                pthread_atfork(&__prefork, &__postfork_parent, &__postfork_child)
                                           ^
------------------------------------------------------------

external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/fork_posix.pyx.pxi:98:43: Cannot assign type 'void (*)(void) except * nogil' to 'void (*)(void) noexcept nogil'. Exception values are incompatible. Suggest adding 'noexcept' to type 'void (void) except * nogil'.

Error compiling Cython file:
------------------------------------------------------------
...
def fork_handlers_and_grpc_init():
    grpc_init()
    if _GRPC_ENABLE_FORK_SUPPORT:
        with _fork_state.fork_handler_registered_lock:
            if not _fork_state.fork_handler_registered:
                pthread_atfork(&__prefork, &__postfork_parent, &__postfork_child)
                                                               ^
------------------------------------------------------------

external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/fork_posix.pyx.pxi:98:63: Cannot assign type 'void (*)(void) except * nogil' to 'void (*)(void) noexcept nogil'. Exception values are incompatible. Suggest adding 'noexcept' to type 'void (void) except * nogil'.

Error compiling Cython file:
------------------------------------------------------------
...
cdef void asyncio_run_loop(size_t timeout_ms) with gil:
    pass


def install_asyncio_iomgr():
    asyncio_resolver_vtable.resolve = asyncio_resolve
                                      ^
------------------------------------------------------------

external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/aio/iomgr/iomgr.pyx.pxi:207:38: Cannot assign type 'grpc_error *(char *, char *, grpc_resolved_addresses **) except? NULL nogil' to 'grpc_error *(*)(char *, char *, grpc_resolved_addresses **) noexcept'. Exception values are incompatible. Suggest adding 'noexcept' to type 'grpc_error *(char *, char *, grpc_resolved_addresses **) except? NULL nogil'.

Error compiling Cython file:
------------------------------------------------------------
...
    pass


def install_asyncio_iomgr():
    asyncio_resolver_vtable.resolve = asyncio_resolve
    asyncio_resolver_vtable.resolve_async = asyncio_resolve_async
                                            ^
------------------------------------------------------------

external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/aio/iomgr/iomgr.pyx.pxi:208:44: Cannot assign type 'void (grpc_custom_resolver *, char *, char *) except * nogil' to 'void (*)(grpc_custom_resolver *, char *, char *) noexcept'. Exception values are incompatible. Suggest adding 'noexcept' to type 'void (grpc_custom_resolver *, char *, char *) except * nogil'.

Error compiling Cython file:
------------------------------------------------------------
...

def install_asyncio_iomgr():
    asyncio_resolver_vtable.resolve = asyncio_resolve
    asyncio_resolver_vtable.resolve_async = asyncio_resolve_async

    asyncio_socket_vtable.init = asyncio_socket_init
                                 ^
------------------------------------------------------------

external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/aio/iomgr/iomgr.pyx.pxi:210:33: Cannot assign type 'grpc_error *(grpc_custom_socket *, int) except? NULL nogil' to 'grpc_error *(*)(grpc_custom_socket *, int) noexcept'. Exception values are incompatible. Suggest adding 'noexcept' to type 'grpc_error *(grpc_custom_socket *, int) except? NULL nogil'.

Error compiling Cython file:
------------------------------------------------------------
...
def install_asyncio_iomgr():
    asyncio_resolver_vtable.resolve = asyncio_resolve
    asyncio_resolver_vtable.resolve_async = asyncio_resolve_async

    asyncio_socket_vtable.init = asyncio_socket_init
    asyncio_socket_vtable.connect = asyncio_socket_connect
                                    ^
------------------------------------------------------------

external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/aio/iomgr/iomgr.pyx.pxi:211:36: Cannot assign type 'void (grpc_custom_socket *, const grpc_sockaddr *, size_t, grpc_custom_connect_callback) except * nogil' to 'void (*)(grpc_custom_socket *, const grpc_sockaddr *, size_t, grpc_custom_connect_callback) noexcept'. Exception values are incompatible. Suggest adding 'noexcept' to type 'void (grpc_custom_socket *, const grpc_sockaddr *, size_t, grpc_custom_connect_callback) except * nogil'.

Error compiling Cython file:
------------------------------------------------------------
...
    asyncio_resolver_vtable.resolve = asyncio_resolve
    asyncio_resolver_vtable.resolve_async = asyncio_resolve_async

    asyncio_socket_vtable.init = asyncio_socket_init
    asyncio_socket_vtable.connect = asyncio_socket_connect
    asyncio_socket_vtable.destroy = asyncio_socket_destroy
                                    ^
------------------------------------------------------------

external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/aio/iomgr/iomgr.pyx.pxi:212:36: Cannot assign type 'void (grpc_custom_socket *) except * nogil' to 'void (*)(grpc_custom_socket *) noexcept'. Exception values are incompatible. Suggest adding 'noexcept' to type 'void (grpc_custom_socket *) except * nogil'.

Error compiling Cython file:
------------------------------------------------------------
...
    asyncio_resolver_vtable.resolve_async = asyncio_resolve_async

    asyncio_socket_vtable.init = asyncio_socket_init
    asyncio_socket_vtable.connect = asyncio_socket_connect
    asyncio_socket_vtable.destroy = asyncio_socket_destroy
    asyncio_socket_vtable.shutdown = asyncio_socket_shutdown
                                     ^
------------------------------------------------------------

external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/aio/iomgr/iomgr.pyx.pxi:213:37: Cannot assign type 'void (grpc_custom_socket *) except * nogil' to 'void (*)(grpc_custom_socket *) noexcept'. Exception values are incompatible. Suggest adding 'noexcept' to type 'void (grpc_custom_socket *) except * nogil'.

Error compiling Cython file:
------------------------------------------------------------
...

    asyncio_socket_vtable.init = asyncio_socket_init
    asyncio_socket_vtable.connect = asyncio_socket_connect
    asyncio_socket_vtable.destroy = asyncio_socket_destroy
    asyncio_socket_vtable.shutdown = asyncio_socket_shutdown
    asyncio_socket_vtable.close = asyncio_socket_close
                                  ^
------------------------------------------------------------

external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/aio/iomgr/iomgr.pyx.pxi:214:34: Cannot assign type 'void (grpc_custom_socket *, grpc_custom_close_callback) except * nogil' to 'void (*)(grpc_custom_socket *, grpc_custom_close_callback) noexcept'. Exception values are incompatible. Suggest adding 'noexcept' to type 'void (grpc_custom_socket *, grpc_custom_close_callback) except * nogil'.

Error compiling Cython file:
------------------------------------------------------------
...
    asyncio_socket_vtable.init = asyncio_socket_init
    asyncio_socket_vtable.connect = asyncio_socket_connect
    asyncio_socket_vtable.destroy = asyncio_socket_destroy
    asyncio_socket_vtable.shutdown = asyncio_socket_shutdown
    asyncio_socket_vtable.close = asyncio_socket_close
    asyncio_socket_vtable.write = asyncio_socket_write
                                  ^
------------------------------------------------------------

external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/aio/iomgr/iomgr.pyx.pxi:215:34: Cannot assign type 'void (grpc_custom_socket *, grpc_slice_buffer *, grpc_custom_write_callback) except * nogil' to 'void (*)(grpc_custom_socket *, grpc_slice_buffer *, grpc_custom_write_callback) noexcept'. Exception values are incompatible. Suggest adding 'noexcept' to type 'void (grpc_custom_socket *, grpc_slice_buffer *, grpc_custom_write_callback) except * nogil'.

Error compiling Cython file:
------------------------------------------------------------
...
    asyncio_socket_vtable.connect = asyncio_socket_connect
    asyncio_socket_vtable.destroy = asyncio_socket_destroy
    asyncio_socket_vtable.shutdown = asyncio_socket_shutdown
    asyncio_socket_vtable.close = asyncio_socket_close
    asyncio_socket_vtable.write = asyncio_socket_write
    asyncio_socket_vtable.read = asyncio_socket_read
                                 ^
------------------------------------------------------------

external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/aio/iomgr/iomgr.pyx.pxi:216:33: Cannot assign type 'void (grpc_custom_socket *, char *, size_t, grpc_custom_read_callback) except * nogil' to 'void (*)(grpc_custom_socket *, char *, size_t, grpc_custom_read_callback) noexcept'. Exception values are incompatible. Suggest adding 'noexcept' to type 'void (grpc_custom_socket *, char *, size_t, grpc_custom_read_callback) except * nogil'.

Error compiling Cython file:
------------------------------------------------------------
...
    asyncio_socket_vtable.destroy = asyncio_socket_destroy
    asyncio_socket_vtable.shutdown = asyncio_socket_shutdown
    asyncio_socket_vtable.close = asyncio_socket_close
    asyncio_socket_vtable.write = asyncio_socket_write
    asyncio_socket_vtable.read = asyncio_socket_read
    asyncio_socket_vtable.getpeername = asyncio_socket_getpeername
                                        ^
------------------------------------------------------------

external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/aio/iomgr/iomgr.pyx.pxi:217:40: Cannot assign type 'grpc_error *(grpc_custom_socket *, const grpc_sockaddr *, int *) except? NULL nogil' to 'grpc_error *(*)(grpc_custom_socket *, const grpc_sockaddr *, int *) noexcept'. Exception values are incompatible. Suggest adding 'noexcept' to type 'grpc_error *(grpc_custom_socket *, const grpc_sockaddr *, int *) except? NULL nogil'.

Error compiling Cython file:
------------------------------------------------------------
...
    asyncio_socket_vtable.shutdown = asyncio_socket_shutdown
    asyncio_socket_vtable.close = asyncio_socket_close
    asyncio_socket_vtable.write = asyncio_socket_write
    asyncio_socket_vtable.read = asyncio_socket_read
    asyncio_socket_vtable.getpeername = asyncio_socket_getpeername
    asyncio_socket_vtable.getsockname = asyncio_socket_getsockname
                                        ^
------------------------------------------------------------

external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/aio/iomgr/iomgr.pyx.pxi:218:40: Cannot assign type 'grpc_error *(grpc_custom_socket *, const grpc_sockaddr *, int *) except? NULL nogil' to 'grpc_error *(*)(grpc_custom_socket *, const grpc_sockaddr *, int *) noexcept'. Exception values are incompatible. Suggest adding 'noexcept' to type 'grpc_error *(grpc_custom_socket *, const grpc_sockaddr *, int *) except? NULL nogil'.

Error compiling Cython file:
------------------------------------------------------------
...
    asyncio_socket_vtable.close = asyncio_socket_close
    asyncio_socket_vtable.write = asyncio_socket_write
    asyncio_socket_vtable.read = asyncio_socket_read
    asyncio_socket_vtable.getpeername = asyncio_socket_getpeername
    asyncio_socket_vtable.getsockname = asyncio_socket_getsockname
    asyncio_socket_vtable.bind = asyncio_socket_bind
                                 ^
------------------------------------------------------------

external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/aio/iomgr/iomgr.pyx.pxi:219:33: Cannot assign type 'grpc_error *(grpc_custom_socket *, const grpc_sockaddr *, size_t, int) except? NULL nogil' to 'grpc_error *(*)(grpc_custom_socket *, const grpc_sockaddr *, size_t, int) noexcept'. Exception values are incompatible. Suggest adding 'noexcept' to type 'grpc_error *(grpc_custom_socket *, const grpc_sockaddr *, size_t, int) except? NULL nogil'.

Error compiling Cython file:
------------------------------------------------------------
...
    asyncio_socket_vtable.write = asyncio_socket_write
    asyncio_socket_vtable.read = asyncio_socket_read
    asyncio_socket_vtable.getpeername = asyncio_socket_getpeername
    asyncio_socket_vtable.getsockname = asyncio_socket_getsockname
    asyncio_socket_vtable.bind = asyncio_socket_bind
    asyncio_socket_vtable.listen = asyncio_socket_listen
                                   ^
------------------------------------------------------------

external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/aio/iomgr/iomgr.pyx.pxi:220:35: Cannot assign type 'grpc_error *(grpc_custom_socket *) except? NULL nogil' to 'grpc_error *(*)(grpc_custom_socket *) noexcept'. Exception values are incompatible. Suggest adding 'noexcept' to type 'grpc_error *(grpc_custom_socket *) except? NULL nogil'.

Error compiling Cython file:
------------------------------------------------------------
...
    asyncio_socket_vtable.read = asyncio_socket_read
    asyncio_socket_vtable.getpeername = asyncio_socket_getpeername
    asyncio_socket_vtable.getsockname = asyncio_socket_getsockname
    asyncio_socket_vtable.bind = asyncio_socket_bind
    asyncio_socket_vtable.listen = asyncio_socket_listen
    asyncio_socket_vtable.accept = asyncio_socket_accept
                                   ^
------------------------------------------------------------

external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/aio/iomgr/iomgr.pyx.pxi:221:35: Cannot assign type 'void (grpc_custom_socket *, grpc_custom_socket *, grpc_custom_accept_callback) except * nogil' to 'void (*)(grpc_custom_socket *, grpc_custom_socket *, grpc_custom_accept_callback) noexcept'. Exception values are incompatible. Suggest adding 'noexcept' to type 'void (grpc_custom_socket *, grpc_custom_socket *, grpc_custom_accept_callback) except * nogil'.

Error compiling Cython file:
------------------------------------------------------------
...
    asyncio_socket_vtable.getsockname = asyncio_socket_getsockname
    asyncio_socket_vtable.bind = asyncio_socket_bind
    asyncio_socket_vtable.listen = asyncio_socket_listen
    asyncio_socket_vtable.accept = asyncio_socket_accept

    asyncio_timer_vtable.start = asyncio_timer_start
                                 ^
------------------------------------------------------------

external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/aio/iomgr/iomgr.pyx.pxi:223:33: Cannot assign type 'void (grpc_custom_timer *) except * nogil' to 'void (*)(grpc_custom_timer *) noexcept'. Exception values are incompatible. Suggest adding 'noexcept' to type 'void (grpc_custom_timer *) except * nogil'.

Error compiling Cython file:
------------------------------------------------------------
...
    asyncio_socket_vtable.bind = asyncio_socket_bind
    asyncio_socket_vtable.listen = asyncio_socket_listen
    asyncio_socket_vtable.accept = asyncio_socket_accept

    asyncio_timer_vtable.start = asyncio_timer_start
    asyncio_timer_vtable.stop = asyncio_timer_stop
                                ^
------------------------------------------------------------

external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/aio/iomgr/iomgr.pyx.pxi:224:32: Cannot assign type 'void (grpc_custom_timer *) except * nogil' to 'void (*)(grpc_custom_timer *) noexcept'. Exception values are incompatible. Suggest adding 'noexcept' to type 'void (grpc_custom_timer *) except * nogil'.

Error compiling Cython file:
------------------------------------------------------------
...
    asyncio_socket_vtable.accept = asyncio_socket_accept

    asyncio_timer_vtable.start = asyncio_timer_start
    asyncio_timer_vtable.stop = asyncio_timer_stop

    asyncio_pollset_vtable.init = asyncio_init_loop
                                  ^
------------------------------------------------------------

external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/aio/iomgr/iomgr.pyx.pxi:226:34: Cannot assign type 'void (void) except * nogil' to 'void (*)(void) noexcept'. Exception values are incompatible. Suggest adding 'noexcept' to type 'void (void) except * nogil'.

Error compiling Cython file:
------------------------------------------------------------
...

    asyncio_timer_vtable.start = asyncio_timer_start
    asyncio_timer_vtable.stop = asyncio_timer_stop

    asyncio_pollset_vtable.init = asyncio_init_loop
    asyncio_pollset_vtable.poll = asyncio_run_loop
                                  ^
------------------------------------------------------------

external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/aio/iomgr/iomgr.pyx.pxi:227:34: Cannot assign type 'void (size_t) except * nogil' to 'void (*)(size_t) noexcept'. Exception values are incompatible. Suggest adding 'noexcept' to type 'void (size_t) except * nogil'.

Error compiling Cython file:
------------------------------------------------------------
...
    asyncio_timer_vtable.start = asyncio_timer_start
    asyncio_timer_vtable.stop = asyncio_timer_stop

    asyncio_pollset_vtable.init = asyncio_init_loop
    asyncio_pollset_vtable.poll = asyncio_run_loop
    asyncio_pollset_vtable.kick = asyncio_kick_loop
                                  ^
------------------------------------------------------------

external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/aio/iomgr/iomgr.pyx.pxi:228:34: Cannot assign type 'void (void) except * nogil' to 'void (*)(void) noexcept'. Exception values are incompatible. Suggest adding 'noexcept' to type 'void (void) except * nogil'.

Error compiling Cython file:
------------------------------------------------------------
...
    asyncio_timer_vtable.stop = asyncio_timer_stop

    asyncio_pollset_vtable.init = asyncio_init_loop
    asyncio_pollset_vtable.poll = asyncio_run_loop
    asyncio_pollset_vtable.kick = asyncio_kick_loop
    asyncio_pollset_vtable.shutdown = asyncio_destroy_loop
                                      ^
------------------------------------------------------------

external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/aio/iomgr/iomgr.pyx.pxi:229:38: Cannot assign type 'void (void) except * nogil' to 'void (*)(void) noexcept'. Exception values are incompatible. Suggest adding 'noexcept' to type 'void (void) except * nogil'.

Error compiling Cython file:
------------------------------------------------------------
...


cdef class CallbackWrapper:

    def __cinit__(self, object future, CallbackFailureHandler failure_handler):
        self.context.functor.functor_run = self.functor_run
                                               ^
------------------------------------------------------------

external/com_github_grpc_grpc/src/python/grpcio/grpc/_cython/_cygrpc/aio/callback_common.pyx.pxi:36:47: Cannot assign type 'void (grpc_experimental_completion_queue_functor *, int) except *' to 'void (*)(grpc_experimental_completion_queue_functor *, int) noexcept'. Exception values are incompatible. Suggest adding 'noexcept' to type 'void (grpc_experimental_completion_queue_functor *, int) except *'.
INFO: Elapsed time: 8.259s, Critical Path: 6.91s
INFO: 30 processes: 18 internal, 12 local.
FAILED: Build did NOT complete successfully
//tensorflow_federated/cc/core/impl/executor_stacks:local_stacks_test NO STATUS
//tensorflow_federated/cc/core/impl/executor_stacks:remote_stacks_test NO STATUS
//tensorflow_federated/cc/core/impl/executors:composing_executor_test NO STATUS
//tensorflow_federated/cc/core/impl/executors:data_executor_test      NO STATUS
//tensorflow_federated/cc/core/impl/executors:dataset_conversions_test NO STATUS
//tensorflow_federated/cc/core/impl/executors:dataset_from_tensor_structures_test NO STATUS
//tensorflow_federated/cc/core/impl/executors:dtensor_api_test        NO STATUS
//tensorflow_federated/cc/core/impl/executors:dtensor_executor_test   NO STATUS
//tensorflow_federated/cc/core/impl/executors:eager_computation_test_cpu NO STATUS
//tensorflow_federated/cc/core/impl/executors:executor_service_test   NO STATUS
//tensorflow_federated/cc/core/impl/executors:federating_executor_test NO STATUS
//tensorflow_federated/cc/core/impl/executors:reference_resolving_executor_test NO STATUS
//tensorflow_federated/cc/core/impl/executors:remote_executor_test    NO STATUS
//tensorflow_federated/cc/core/impl/executors:sequence_executor_test  NO STATUS
//tensorflow_federated/cc/core/impl/executors:session_provider_test   NO STATUS
//tensorflow_federated/cc/core/impl/executors:streaming_remote_executor_test NO STATUS
//tensorflow_federated/cc/core/impl/executors:struct_traversal_order_test NO STATUS
//tensorflow_federated/cc/core/impl/executors:tensorflow_executor_parameterized_test_cpu NO STATUS
//tensorflow_federated/cc/core/impl/executors:tensorflow_utils_test   NO STATUS
//tensorflow_federated/cc/core/impl/executors:threading_test          NO STATUS
//tensorflow_federated/cc/core/impl/executors:value_validation_test   NO STATUS
//tensorflow_federated/cc/core/impl/executors:xla_executor_test_cpu   NO STATUS
//tensorflow_federated/cc/core/impl/executors:xla_utils_test          NO STATUS
//tensorflow_federated/python/aggregators:aggregator_test_utils_test  NO STATUS
//tensorflow_federated/python/aggregators:concat_test                 NO STATUS
//tensorflow_federated/python/aggregators:deterministic_discretization_test NO STATUS
//tensorflow_federated/python/aggregators:differential_privacy_test   NO STATUS
//tensorflow_federated/python/aggregators:discretization_test         NO STATUS
//tensorflow_federated/python/aggregators:elias_gamma_encode_test     NO STATUS
//tensorflow_federated/python/aggregators:encoded_test                NO STATUS
//tensorflow_federated/python/aggregators:factory_utils_test          NO STATUS
//tensorflow_federated/python/aggregators:hadamard_test               NO STATUS
//tensorflow_federated/python/aggregators:mean_test                   NO STATUS
//tensorflow_federated/python/aggregators:measurements_test           NO STATUS
//tensorflow_federated/python/aggregators:modular_clipping_test       NO STATUS
//tensorflow_federated/python/aggregators:primitives_test             NO STATUS
//tensorflow_federated/python/aggregators:quantile_estimation_test    NO STATUS
//tensorflow_federated/python/aggregators:robust_test                 NO STATUS
//tensorflow_federated/python/aggregators:rotation_test               NO STATUS
//tensorflow_federated/python/aggregators:sampling_test               NO STATUS
//tensorflow_federated/python/aggregators:secure_test                 NO STATUS
//tensorflow_federated/python/aggregators:stochastic_discretization_test NO STATUS
//tensorflow_federated/python/aggregators:sum_factory_test            NO STATUS
//tensorflow_federated/python/analytics:count_distinct_test           NO STATUS
//tensorflow_federated/python/analytics:data_processing_test          NO STATUS
//tensorflow_federated/python/analytics:differential_privacy_test     NO STATUS
//tensorflow_federated/python/analytics:histogram_processing_test     NO STATUS
//tensorflow_federated/python/analytics/heavy_hitters/iblt:chunkers_test NO STATUS
//tensorflow_federated/python/analytics/heavy_hitters/iblt:hyperedge_hashers_test NO STATUS
//tensorflow_federated/python/analytics/heavy_hitters/iblt:iblt_clipping_test NO STATUS
//tensorflow_federated/python/analytics/heavy_hitters/iblt:iblt_factory_test NO STATUS
//tensorflow_federated/python/analytics/heavy_hitters/iblt:iblt_lib_test NO STATUS
//tensorflow_federated/python/analytics/heavy_hitters/iblt:iblt_tensor_test NO STATUS
//tensorflow_federated/python/analytics/heavy_hitters/iblt:iblt_tff_test NO STATUS
//tensorflow_federated/python/analytics/heavy_hitters/iblt:subsample_process_test NO STATUS
//tensorflow_federated/python/analytics/hierarchical_histogram:build_tree_from_leaf_test NO STATUS
//tensorflow_federated/python/analytics/hierarchical_histogram:clipping_factory_test NO STATUS
//tensorflow_federated/python/analytics/hierarchical_histogram:hierarchical_histogram_decoder_test NO STATUS
//tensorflow_federated/python/analytics/hierarchical_histogram:hierarchical_histogram_factory_test NO STATUS
//tensorflow_federated/python/analytics/hierarchical_histogram:hierarchical_histogram_lib_test NO STATUS
//tensorflow_federated/python/common_libs:async_utils_test            NO STATUS
//tensorflow_federated/python/common_libs:deprecation_test            NO STATUS
//tensorflow_federated/python/common_libs:golden_test                 NO STATUS
//tensorflow_federated/python/common_libs:py_typecheck_test           NO STATUS
//tensorflow_federated/python/common_libs:retrying_test               NO STATUS
//tensorflow_federated/python/common_libs:structure_test              NO STATUS
//tensorflow_federated/python/common_libs:tracing_test                NO STATUS
//tensorflow_federated/python/core/backends/mapreduce:compiler_test   NO STATUS
//tensorflow_federated/python/core/backends/mapreduce:form_utils_test NO STATUS
//tensorflow_federated/python/core/backends/mapreduce:forms_test      NO STATUS
//tensorflow_federated/python/core/backends/native:compiler_test      NO STATUS
//tensorflow_federated/python/core/backends/native:execution_contexts_test NO STATUS
//tensorflow_federated/python/core/backends/native:mergeable_comp_compiler_test NO STATUS
//tensorflow_federated/python/core/backends/test:execution_contexts_test NO STATUS
//tensorflow_federated/python/core/environments/jax_frontend:jax_computation_context_test NO STATUS
//tensorflow_federated/python/core/environments/jax_frontend:jax_computation_test NO STATUS
//tensorflow_federated/python/core/environments/jax_frontend:jax_serialization_test NO STATUS
//tensorflow_federated/python/core/environments/tensorflow_backend:compiled_computation_transformations_test NO STATUS
//tensorflow_federated/python/core/environments/tensorflow_backend:tensorflow_building_block_factory_test NO STATUS
//tensorflow_federated/python/core/environments/tensorflow_backend:tensorflow_computation_transformations_test NO STATUS
//tensorflow_federated/python/core/environments/tensorflow_backend:tensorflow_tree_transformations_test NO STATUS
//tensorflow_federated/python/core/environments/tensorflow_frontend:tensorflow_computation_context_test NO STATUS
//tensorflow_federated/python/core/environments/tensorflow_frontend:tensorflow_computation_test NO STATUS
//tensorflow_federated/python/core/environments/tensorflow_frontend:tensorflow_serialization_test NO STATUS
//tensorflow_federated/python/core/environments/xla_backend:compiler_test NO STATUS
//tensorflow_federated/python/core/environments/xla_backend:runtime_test NO STATUS
//tensorflow_federated/python/core/environments/xla_backend:xla_serialization_test NO STATUS
//tensorflow_federated/python/core/impl/compiler:array_test           NO STATUS
//tensorflow_federated/python/core/impl/compiler:building_block_factory_test NO STATUS
//tensorflow_federated/python/core/impl/compiler:building_blocks_test NO STATUS
//tensorflow_federated/python/core/impl/compiler:compiler_test_utils_test NO STATUS
//tensorflow_federated/python/core/impl/compiler:computation_factory_test NO STATUS
//tensorflow_federated/python/core/impl/compiler:intrinsic_defs_test  NO STATUS
//tensorflow_federated/python/core/impl/compiler:tensorflow_computation_factory_test_cpu NO STATUS
//tensorflow_federated/python/core/impl/compiler:transformation_utils_test NO STATUS
//tensorflow_federated/python/core/impl/compiler:transformations_test NO STATUS
//tensorflow_federated/python/core/impl/compiler:tree_analysis_test   NO STATUS
//tensorflow_federated/python/core/impl/compiler:tree_transformations_test NO STATUS
//tensorflow_federated/python/core/impl/computation:computation_impl_test NO STATUS
//tensorflow_federated/python/core/impl/computation:computation_serialization_test NO STATUS
//tensorflow_federated/python/core/impl/computation:computation_wrapper_test NO STATUS
//tensorflow_federated/python/core/impl/computation:function_utils_test NO STATUS
//tensorflow_federated/python/core/impl/computation:polymorphic_computation_test NO STATUS
//tensorflow_federated/python/core/impl/context_stack:context_stack_impl_test NO STATUS
//tensorflow_federated/python/core/impl/context_stack:context_stack_test_utils_test NO STATUS
//tensorflow_federated/python/core/impl/context_stack:get_context_stack_test NO STATUS
//tensorflow_federated/python/core/impl/context_stack:set_default_context_test NO STATUS
//tensorflow_federated/python/core/impl/execution_contexts:async_execution_context_test NO STATUS
//tensorflow_federated/python/core/impl/execution_contexts:compiler_pipeline_test NO STATUS
//tensorflow_federated/python/core/impl/execution_contexts:mergeable_comp_execution_context_test NO STATUS
//tensorflow_federated/python/core/impl/executor_stacks:python_executor_stacks_test NO STATUS
//tensorflow_federated/python/core/impl/executors:cardinalities_utils_test NO STATUS
//tensorflow_federated/python/core/impl/executors:data_conversions_test NO STATUS
//tensorflow_federated/python/core/impl/executors:data_descriptor_test NO STATUS
//tensorflow_federated/python/core/impl/executors:executor_utils_test NO STATUS
//tensorflow_federated/python/core/impl/executors:remote_executor_grpc_stub_test NO STATUS
//tensorflow_federated/python/core/impl/executors:remote_executor_test NO STATUS
//tensorflow_federated/python/core/impl/executors:value_serialization_test NO STATUS
//tensorflow_federated/python/core/impl/federated_context:federated_computation_context_test NO STATUS
//tensorflow_federated/python/core/impl/federated_context:federated_computation_test NO STATUS
//tensorflow_federated/python/core/impl/federated_context:federated_computation_utils_test NO STATUS
//tensorflow_federated/python/core/impl/federated_context:intrinsics_test NO STATUS
//tensorflow_federated/python/core/impl/federated_context:value_impl_test NO STATUS
//tensorflow_federated/python/core/impl/federated_context:value_utils_test NO STATUS
//tensorflow_federated/python/core/impl/types:array_shape_test        NO STATUS
//tensorflow_federated/python/core/impl/types:computation_types_test  NO STATUS
//tensorflow_federated/python/core/impl/types:dtype_utils_test        NO STATUS
//tensorflow_federated/python/core/impl/types:placements_test         NO STATUS
//tensorflow_federated/python/core/impl/types:type_analysis_test      NO STATUS
//tensorflow_federated/python/core/impl/types:type_conversions_test   NO STATUS
//tensorflow_federated/python/core/impl/types:type_factory_test       NO STATUS
//tensorflow_federated/python/core/impl/types:type_serialization_test NO STATUS
//tensorflow_federated/python/core/impl/types:type_transformations_test NO STATUS
//tensorflow_federated/python/core/impl/utils:tensorflow_utils_test   NO STATUS
//tensorflow_federated/python/core/templates:aggregation_process_test NO STATUS
//tensorflow_federated/python/core/templates:estimation_process_test  NO STATUS
//tensorflow_federated/python/core/templates:iterative_process_test   NO STATUS
//tensorflow_federated/python/core/templates:measured_process_test    NO STATUS
//tensorflow_federated/python/core/test:static_assert_test            NO STATUS
//tensorflow_federated/python/learning:dataset_reduce_test_cpu        NO STATUS
//tensorflow_federated/python/learning:debug_measurements_test        NO STATUS
//tensorflow_federated/python/learning:federated_evaluation_test_cpu  NO STATUS
//tensorflow_federated/python/learning:model_update_aggregator_test   NO STATUS
//tensorflow_federated/python/learning/algorithms:fed_avg_test_cpu    NO STATUS
//tensorflow_federated/python/learning/algorithms:fed_avg_with_optimizer_schedule_test_cpu NO STATUS
//tensorflow_federated/python/learning/algorithms:fed_eval_test_cpu   NO STATUS
//tensorflow_federated/python/learning/algorithms:fed_prox_test_cpu   NO STATUS
//tensorflow_federated/python/learning/algorithms:fed_recon_eval_test NO STATUS
//tensorflow_federated/python/learning/algorithms:fed_sgd_test_cpu    NO STATUS
//tensorflow_federated/python/learning/algorithms:kmeans_clustering_test NO STATUS
//tensorflow_federated/python/learning/metrics:aggregation_utils_test NO STATUS
//tensorflow_federated/python/learning/metrics:aggregator_test        NO STATUS
//tensorflow_federated/python/learning/metrics:counters_test          NO STATUS
//tensorflow_federated/python/learning/metrics:keras_finalizer_test   NO STATUS
//tensorflow_federated/python/learning/metrics:keras_utils_test       NO STATUS
//tensorflow_federated/python/learning/metrics:sampling_aggregation_factory_test NO STATUS
//tensorflow_federated/python/learning/metrics:sum_aggregation_factory_test NO STATUS
//tensorflow_federated/python/learning/models:functional_test         NO STATUS
//tensorflow_federated/python/learning/models:keras_utils_test        NO STATUS
//tensorflow_federated/python/learning/models:model_examples_test     NO STATUS
//tensorflow_federated/python/learning/models:model_weights_test      NO STATUS
//tensorflow_federated/python/learning/models:reconstruction_model_test NO STATUS
//tensorflow_federated/python/learning/models:serialization_test      NO STATUS
//tensorflow_federated/python/learning/optimizers:adafactor_test      NO STATUS
//tensorflow_federated/python/learning/optimizers:adagrad_test        NO STATUS
//tensorflow_federated/python/learning/optimizers:adam_test           NO STATUS
//tensorflow_federated/python/learning/optimizers:integration_test    NO STATUS
//tensorflow_federated/python/learning/optimizers:keras_optimizer_test NO STATUS
//tensorflow_federated/python/learning/optimizers:optimizer_test      NO STATUS
//tensorflow_federated/python/learning/optimizers:optimizer_test_utils_test NO STATUS
//tensorflow_federated/python/learning/optimizers:rmsprop_test        NO STATUS
//tensorflow_federated/python/learning/optimizers:scheduling_test     NO STATUS
//tensorflow_federated/python/learning/optimizers:sgdm_test           NO STATUS
//tensorflow_federated/python/learning/optimizers:yogi_test           NO STATUS
//tensorflow_federated/python/learning/programs:evaluation_program_logic_test NO STATUS
//tensorflow_federated/python/learning/programs:training_program_logic_test NO STATUS
//tensorflow_federated/python/learning/programs:vizier_program_logic_test NO STATUS
//tensorflow_federated/python/learning/templates:apply_optimizer_finalizer_test NO STATUS
//tensorflow_federated/python/learning/templates:client_works_test    NO STATUS
//tensorflow_federated/python/learning/templates:composers_test       NO STATUS
//tensorflow_federated/python/learning/templates:distributors_test    NO STATUS
//tensorflow_federated/python/learning/templates:finalizers_test      NO STATUS
//tensorflow_federated/python/learning/templates:hparams_base_test    NO STATUS
//tensorflow_federated/python/learning/templates:learning_process_test NO STATUS
//tensorflow_federated/python/learning/templates:model_delta_client_work_test NO STATUS
//tensorflow_federated/python/learning/templates:proximal_client_work_test NO STATUS
//tensorflow_federated/python/learning/templates:type_checks_test     NO STATUS
//tensorflow_federated/python/program:client_id_data_source_test      NO STATUS
//tensorflow_federated/python/program:dataset_data_source_test        NO STATUS
//tensorflow_federated/python/program:federated_context_test          NO STATUS
//tensorflow_federated/python/program:file_program_state_manager_test NO STATUS
//tensorflow_federated/python/program:file_release_manager_test       NO STATUS
//tensorflow_federated/python/program:file_utils_test                 NO STATUS
//tensorflow_federated/python/program:logging_release_manager_test    NO STATUS
//tensorflow_federated/python/program:memory_release_manager_test     NO STATUS
//tensorflow_federated/python/program:native_platform_test            NO STATUS
//tensorflow_federated/python/program:program_state_manager_test      NO STATUS
//tensorflow_federated/python/program:release_manager_test            NO STATUS
//tensorflow_federated/python/program:serialization_utils_test        NO STATUS
//tensorflow_federated/python/program:structure_utils_test            NO STATUS
//tensorflow_federated/python/program:tensorboard_release_manager_test NO STATUS
//tensorflow_federated/python/program:value_reference_test            NO STATUS
//tensorflow_federated/python/simulation:iterative_process_compositions_test NO STATUS
//tensorflow_federated/python/simulation:sampling_utils_test          NO STATUS
//tensorflow_federated/python/simulation:training_loop_test           NO STATUS
//tensorflow_federated/python/simulation/baselines:baseline_task_test NO STATUS
//tensorflow_federated/python/simulation/baselines:keras_metrics_test NO STATUS
//tensorflow_federated/python/simulation/baselines:task_data_test     NO STATUS
//tensorflow_federated/python/simulation/baselines/cifar100:image_classification_preprocessing_test NO STATUS
//tensorflow_federated/python/simulation/baselines/cifar100:image_classification_tasks_test NO STATUS
//tensorflow_federated/python/simulation/baselines/emnist:autoencoder_tasks_test NO STATUS
//tensorflow_federated/python/simulation/baselines/emnist:char_recognition_tasks_test NO STATUS
//tensorflow_federated/python/simulation/baselines/emnist:emnist_models_test NO STATUS
//tensorflow_federated/python/simulation/baselines/emnist:emnist_preprocessing_test NO STATUS
//tensorflow_federated/python/simulation/baselines/landmark:landmark_preprocessing_test NO STATUS
//tensorflow_federated/python/simulation/baselines/landmark:landmark_tasks_test NO STATUS
//tensorflow_federated/python/simulation/baselines/shakespeare:char_prediction_models_test NO STATUS
//tensorflow_federated/python/simulation/baselines/shakespeare:char_prediction_preprocessing_test NO STATUS
//tensorflow_federated/python/simulation/baselines/shakespeare:char_prediction_tasks_test NO STATUS
//tensorflow_federated/python/simulation/baselines/stackoverflow:tag_prediction_preprocessing_test NO STATUS
//tensorflow_federated/python/simulation/baselines/stackoverflow:tag_prediction_tasks_test NO STATUS
//tensorflow_federated/python/simulation/baselines/stackoverflow:word_prediction_models_test NO STATUS
//tensorflow_federated/python/simulation/baselines/stackoverflow:word_prediction_preprocessing_test NO STATUS
//tensorflow_federated/python/simulation/baselines/stackoverflow:word_prediction_tasks_test NO STATUS
//tensorflow_federated/python/simulation/datasets:celeba_test         NO STATUS
//tensorflow_federated/python/simulation/datasets:cifar100_test       NO STATUS
//tensorflow_federated/python/simulation/datasets:dataset_utils_test  NO STATUS
//tensorflow_federated/python/simulation/datasets:download_test       NO STATUS
//tensorflow_federated/python/simulation/datasets:emnist_test         NO STATUS
//tensorflow_federated/python/simulation/datasets:file_per_user_client_data_test NO STATUS
//tensorflow_federated/python/simulation/datasets:flair_test          NO STATUS
//tensorflow_federated/python/simulation/datasets:from_tensor_slices_client_data_test NO STATUS
//tensorflow_federated/python/simulation/datasets:gldv2_test          NO STATUS
//tensorflow_federated/python/simulation/datasets:inaturalist_test    NO STATUS
//tensorflow_federated/python/simulation/datasets:shakespeare_test    NO STATUS
//tensorflow_federated/python/simulation/datasets:sql_client_data_test NO STATUS
//tensorflow_federated/python/simulation/datasets:sql_client_data_utils_test NO STATUS
//tensorflow_federated/python/simulation/datasets:stackoverflow_test  NO STATUS
//tensorflow_federated/python/simulation/datasets:transforming_client_data_test NO STATUS
//tensorflow_federated/python/simulation/datasets:vision_datasets_utils_test NO STATUS
//tensorflow_federated/python/simulation/models:mobilenet_v2_test     NO STATUS
//tensorflow_federated/python/simulation/models:resnet_models_test    NO STATUS
//tensorflow_federated/python/tensorflow_libs:graph_optimizations_test NO STATUS
//tensorflow_federated/python/tensorflow_libs:graph_spec_test         NO STATUS
//tensorflow_federated/python/tensorflow_libs:graph_utils_test        NO STATUS
//tensorflow_federated/python/tensorflow_libs:serialization_utils_test NO STATUS
//tensorflow_federated/python/tensorflow_libs:tensor_utils_test       NO STATUS
//tensorflow_federated/python/tensorflow_libs:variable_utils_test     NO STATUS
//tensorflow_federated/python/tensorflow_libs:version_check_test      NO STATUS
//tensorflow_federated/python/tests:ast_generation_test               NO STATUS
//tensorflow_federated/python/tests:async_execution_context_integration_test NO STATUS
//tensorflow_federated/python/tests:backend_accelerators_test_cpu     NO STATUS
//tensorflow_federated/python/tests:backend_test                      NO STATUS
//tensorflow_federated/python/tests:map_reduce_form_test              NO STATUS
//tensorflow_federated/python/tests:mergeable_comp_execution_context_integration_test NO STATUS
//tensorflow_federated/python/tests:remote_runtime_stream_structs_test NO STATUS
//tensorflow_federated/python/tests:simulation_test                   NO STATUS
//tensorflow_federated/python/tests:sync_local_cpp_execution_context_test NO STATUS
//tensorflow_federated/python/simulation/datasets:client_data_test FAILED TO BUILD
Test cases: finished with 0 passing and 0 failing out of 0 test cases

Executed 0 out of 259 tests: 1 fails to build and 258 were skipped.

GRPS in TF hasn't been changed for ages, so that it is definitely not the source of the problem, updates to bazelrc are not revealing as well. So far I suspect the non-hermetic toolchain patch, but have to dig deeper.

@evgri243
Copy link
Author

After some googling, it looks it is related to Cython update somewhere down the line; I'll double-check.

@evgri243
Copy link
Author

Resolved the GRPC issue. There is a "hidden" regression in TensorFlow 2.16.1 due to Cython update. The latest release of GRPC cannot be built with Cython 3.0 due to the errors above. The fix on GRPC side is merged to master, but is yet to be released: grpc/grpc#33918

Selecting between unstable GRPC master and an older release of Cython, I picked the latter and rolled it back to the version as of TensorFlow 2.14.1.

@evgri243
Copy link
Author

evgri243 commented Apr 23, 2024

Okay, the update to TensorFlow 2.16.1 has built and passed an expectable number of tests.

In attachment is an html test report. At first glance, apart from compression, we have one more dependency to handle: tensorflow-model-optimisation. And according to the issue tensorflow/model-optimization#1119 they have no plans on Keras 3 support apart from forcing Keras 2 legacy mode. The only algorithm affected is IBLT Heavy Hitters.

Test Results.html.zip

For our own needs, we currently need TFF without any of the affected dependencies (even DiffP), so that I'll prefer stabilizing the core first. I'll hope to hack it around to support both Keras 2 and 3 as APIs are heavily compatible, and there is a trend on libraries forcing Keras 2 compatibility through a global TF_USE_LEGACY_KERAS=1 override.

What do you think?

@michaelreneer
Copy link
Collaborator

It seems like there is a story around grpc in WORKSAPCE file, so that, just to ask: any chance it looks familiar? Otherwise, I'll continue exploring what has actually changed.

# bazel test //tensorflow_federated/... (click to open)
GRPS in TF hasn't been changed for ages, so that it is definitely not the source of the problem, updates to bazelrc are not revealing as well. So far I suspect the non-hermetic toolchain patch, but have to dig deeper.

I've not seen this specific error before, but you are correct the grpc and protobuf deps are always hard to update because of the source dependency on TF. I've tried to update both of those deps recently independently from TF and hit different issue then the one you are hitting.

@michaelreneer
Copy link
Collaborator

Okay, the update to TensorFlow 2.16.1 has built and passed an expectable number of tests.

Nice!

In attachment is an html test report. At first glance, apart from compression, we have one more dependency to handle: tensorflow-model-optimisation. And according to the issue tensorflow/model-optimization#1119 they have no plans on Keras 3 support apart from forcing Keras 2 legacy mode. The only algorithm affected is IBLT Heavy Hitters.

Test Results.html.zip

  1. I do intend to remove the compression dep and the associated code that depends on it. I won't be able to get to it for a week probably. Feel free to send me a PR if that is not fast enough.
  2. regarding model-optimization, let me get back to you on this. I'm going to try and do some investigation on my end to see if I can find out more.

For our own needs, we currently need TFF without any of the affected dependencies (even DiffP), so that I'll prefer stabilizing the core first. I'll hope to hack it around to support both Keras 2 and 3 as APIs are heavily compatible, and there is a trend on libraries forcing Keras 2 compatibility through a global TF_USE_LEGACY_KERAS=1 override.

What do you think?

  1. I am currently working to split TFF up into multiple repos, where core and the domain specific algorithms specifically would be in different repositories. After which, your use case would be more easily supported.
  2. regarding global TF_USE_LEGACY_KERAS=1 override, I also see this so +1 - which I think is a fine solution
  3. However, If you are able to build from source, then I think you can do what you are trying to do in the short term forking TFF, applying the update to the deps, and stripping out the failing parts or all the parts that you don't need. It would be nice to save the commits that you use to sort out the version bump so that when we do split out core we can see what it would take to apply this update to that code.

@evgri243
Copy link
Author

evgri243 commented Apr 25, 2024

<removed, I need to think a little more>

@evgri243
Copy link
Author

evgri243 commented May 5, 2024

A recent update. I tried a few approaches to handle the problem, and so far the most reasonable one is to run with TF_USE_LEGACY_KERAS=1 for dependencies and adjust TFF's code to run for both Kerases using explicitly tf_keras and keras packages.

While I managed to temporarily remove model-optimisation and compression, privacy and its dependency tree is too deeply wired into the library to refactor it out. And it makes sense to be honest due to the nature of Federated Computations.

Amazing code quality, by the way!

Meanwhile, due to the most logic going through tracing at some stage, it doesn't really matter for TFF, which Keras is being used until it is code-compatible with both Keras 2 and Keras 3. Accidentally, I managed to successfully run a few tests with Keras 3 sequential model and Keras 2 counter metrics... It worked, though this code path is definitely not to be officially supported.

Nevertheless, the amount of work is quite dramatic and I'm slowly progressing through it. I'll keep you updated on the progress and hope to show the code soon.


Though I am not the fun of TF_USE_LEGACY_KERAS, it seems to be the way for many libraries so far. In future, as all dependencies either update to Keras 3 or start explicitly using tf_keras, it will look much better. If I manage to make tests passing both Keras 2 and 3 variants through parametrisation, it should be quite easy to support both frameworks in the long run.


While it came mostly to facelift with TFF, TensorFlow Privacy actually requires a much bigger update for Keras 3. It should either explicitly switch to tf_keras for now or be quite refactored as some parts of it are no longer available in Keras 3, most notably the TensorFlow Estimators (removed in TF 2.16) and tf.keras.legacy namespace (removed in Keras 3) used inside quite intensively and not only for internal implementation, but also for the public APIs. I will definitely need help with that to update the dependency.

@michaelreneer
Copy link
Collaborator

Regarding dependencies, #4669 should help.

I'll try and ping some of the developers who are more actively working on TensorFlow Privacy.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants