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

Fix "Unsupported type_id conversion" in triton inference #839

Merged
merged 3 commits into from
May 21, 2021

Conversation

benfred
Copy link
Member

@benfred benfred commented May 21, 2021

We're hitting an error like " Unsupported type_id conversion to cudf " when running any strings
through nvtabular inference with triton. Fix by converting the dtypes as appropiate in
_convert_tensor.

Also add a basic unittest that would have caught this error, launching tritonserver in a
subprocess and communicating through grpc

We're hitting an error like " Unsupported type_id conversion to cudf " when running any strings
through nvtabular inference with triton. Fix by converting the dtypes as appropiate in
_convert_tensor.

Also add a basic unittest that would have caught this error, launching tritonserver in a
subprocess and communicating through grpc
@benfred benfred linked an issue May 21, 2021 that may be closed by this pull request
@nvidia-merlin-bot
Copy link
Contributor

Click to view CI Results
GitHub pull request #839 of commit 8ad832f35d923e1f356973218191833828226391, no merge conflicts.
Running as SYSTEM
Setting status of 8ad832f35d923e1f356973218191833828226391 to PENDING with url http://10.20.13.93:8080/job/nvtabular_tests/2458/ and message: 'Pending'
Using context: Jenkins Unit Test Run
Building in workspace /var/jenkins_home/workspace/nvtabular_tests
using credential nvidia-merlin-bot
Cloning the remote Git repository
Cloning repository https://github.com/NVIDIA/NVTabular.git
 > git init /var/jenkins_home/workspace/nvtabular_tests/nvtabular # timeout=10
Fetching upstream changes from https://github.com/NVIDIA/NVTabular.git
 > git --version # timeout=10
using GIT_ASKPASS to set credentials This is the bot credentials for our CI/CD
 > git fetch --tags --force --progress -- https://github.com/NVIDIA/NVTabular.git +refs/heads/*:refs/remotes/origin/* # timeout=10
 > git config remote.origin.url https://github.com/NVIDIA/NVTabular.git # timeout=10
 > git config --add remote.origin.fetch +refs/heads/*:refs/remotes/origin/* # timeout=10
 > git config remote.origin.url https://github.com/NVIDIA/NVTabular.git # timeout=10
Fetching upstream changes from https://github.com/NVIDIA/NVTabular.git
using GIT_ASKPASS to set credentials This is the bot credentials for our CI/CD
 > git fetch --tags --force --progress -- https://github.com/NVIDIA/NVTabular.git +refs/pull/839/*:refs/remotes/origin/pr/839/* # timeout=10
 > git rev-parse 8ad832f35d923e1f356973218191833828226391^{commit} # timeout=10
Checking out Revision 8ad832f35d923e1f356973218191833828226391 (detached)
 > git config core.sparsecheckout # timeout=10
 > git checkout -f 8ad832f35d923e1f356973218191833828226391 # timeout=10
Commit message: "Fix "Unsupported type_id conversion" in triton inference"
 > git rev-list --no-walk 69de2793a807781079b04a89541ac0b3d9d3bc70 # timeout=10
First time build. Skipping changelog.
[nvtabular_tests] $ /bin/bash /tmp/jenkins2131137861674969113.sh
Installing NVTabular
Looking in indexes: https://pypi.org/simple, https://pypi.ngc.nvidia.com
Obtaining file:///var/jenkins_home/workspace/nvtabular_tests/nvtabular
  Installing build dependencies: started
  Installing build dependencies: finished with status 'done'
  Getting requirements to build wheel: started
  Getting requirements to build wheel: finished with status 'done'
    Preparing wheel metadata: started
    Preparing wheel metadata: finished with status 'done'
Installing collected packages: nvtabular
  Running setup.py develop for nvtabular
Successfully installed nvtabular
WARNING: You are using pip version 21.0.1; however, version 21.1.1 is available.
You should consider upgrading via the '/usr/bin/python -m pip install --upgrade pip' command.
Running black --check
All done! ✨ 🍰 ✨
106 files would be left unchanged.
Running flake8
Running isort
/usr/local/lib/python3.8/dist-packages/isort/main.py:141: UserWarning: Likely recursive symlink detected to /var/jenkins_home/workspace/nvtabular_tests/nvtabular/images
  warn(f"Likely recursive symlink detected to {resolved_path}")
/usr/local/lib/python3.8/dist-packages/isort/main.py:141: UserWarning: Likely recursive symlink detected to /var/jenkins_home/workspace/nvtabular_tests/nvtabular/examples/scaling-criteo/imgs
  warn(f"Likely recursive symlink detected to {resolved_path}")
Skipped 1 files
Running bandit
Running pylint

Your code has been rated at 10.00/10 (previous run: 10.00/10, +0.00)

Running flake8-nb
Building docs
make: Entering directory '/var/jenkins_home/workspace/nvtabular_tests/nvtabular/docs'
2021-05-21 20:12:12.552210: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcudart.so.11.0
2021-05-21 20:12:13.903427: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcuda.so.1
2021-05-21 20:12:13.904505: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1733] Found device 0 with properties:
pciBusID: 0000:07:00.0 name: Tesla P100-DGXS-16GB computeCapability: 6.0
coreClock: 1.4805GHz coreCount: 56 deviceMemorySize: 15.90GiB deviceMemoryBandwidth: 681.88GiB/s
2021-05-21 20:12:13.905497: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1733] Found device 1 with properties:
pciBusID: 0000:08:00.0 name: Tesla P100-DGXS-16GB computeCapability: 6.0
coreClock: 1.4805GHz coreCount: 56 deviceMemorySize: 15.90GiB deviceMemoryBandwidth: 681.88GiB/s
2021-05-21 20:12:13.905524: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcudart.so.11.0
2021-05-21 20:12:13.905577: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcublas.so.11
2021-05-21 20:12:13.905614: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcublasLt.so.11
2021-05-21 20:12:13.905650: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcufft.so.10
2021-05-21 20:12:13.905685: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcurand.so.10
2021-05-21 20:12:13.905736: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcusolver.so.11
2021-05-21 20:12:13.905771: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcusparse.so.11
2021-05-21 20:12:13.905788: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcudnn.so.8
2021-05-21 20:12:13.909889: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1871] Adding visible gpu devices: 0, 1
/usr/lib/python3/dist-packages/requests/init.py:89: RequestsDependencyWarning: urllib3 (1.26.4) or chardet (3.0.4) doesn't match a supported version!
warnings.warn("urllib3 ({}) or chardet ({}) doesn't match a supported "
/usr/local/lib/python3.8/dist-packages/recommonmark/parser.py:75: UserWarning: Container node skipped: type=document
warn("Container node skipped: type={0}".format(mdnode.t))
/usr/local/lib/python3.8/dist-packages/recommonmark/parser.py:75: UserWarning: Container node skipped: type=document
warn("Container node skipped: type={0}".format(mdnode.t))
/usr/local/lib/python3.8/dist-packages/recommonmark/parser.py:75: UserWarning: Container node skipped: type=document
warn("Container node skipped: type={0}".format(mdnode.t))
make: Leaving directory '/var/jenkins_home/workspace/nvtabular_tests/nvtabular/docs'
============================= test session starts ==============================
platform linux -- Python 3.8.5, pytest-6.2.4, py-1.10.0, pluggy-0.13.1
rootdir: /var/jenkins_home/workspace/nvtabular_tests/nvtabular, configfile: pyproject.toml
plugins: xdist-2.2.1, forked-1.3.0, cov-2.12.0
collected 803 items

tests/unit/test_column_group.py .. [ 0%]
tests/unit/test_column_similarity.py ...... [ 0%]
tests/unit/test_dask_nvt.py ............................................ [ 6%]
..................................................................... [ 15%]
tests/unit/test_dataloader_backend.py . [ 15%]
tests/unit/test_io.py .................................................. [ 21%]
..................................................................ssssss [ 30%]
ss.................................................. [ 36%]
tests/unit/test_notebooks.py ...... [ 37%]
tests/unit/test_ops.py ................................................. [ 43%]
........................................................................ [ 52%]
........................................................................ [ 61%]
............................................. [ 67%]
tests/unit/test_s3.py F. [ 67%]
tests/unit/test_tf_dataloader.py ................................s [ 71%]
tests/unit/test_tf_layers.py ........................................... [ 76%]
................................... [ 81%]
tests/unit/test_tools.py ...................... [ 84%]
tests/unit/test_torch_dataloader.py .................................. [ 88%]
tests/unit/test_triton_inference.py F.. [ 88%]
tests/unit/test_workflow.py ............................................ [ 94%]
............................................... [100%]

=================================== FAILURES ===================================
___________________________ test_s3_dataset[parquet] ___________________________

s3_base = 'http://127.0.0.1:5000/'
s3so = {'client_kwargs': {'endpoint_url': 'http://127.0.0.1:5000/'}}
paths = ['/tmp/pytest-of-jenkins/pytest-2/parquet0/dataset-0.parquet', '/tmp/pytest-of-jenkins/pytest-2/parquet0/dataset-1.parquet']
datasets = {'cats': local('/tmp/pytest-of-jenkins/pytest-2/cats0'), 'csv': local('/tmp/pytest-of-jenkins/pytest-2/csv0'), 'csv-no... local('/tmp/pytest-of-jenkins/pytest-2/csv-no-header0'), 'parquet': local('/tmp/pytest-of-jenkins/pytest-2/parquet0')}
engine = 'parquet'
df = name-cat name-string id label x y
0 Tim Dan 981 1060 -0.163721 -0.195478
...da 970 978 -0.820635 0.076937
4320 Victor Dan 1023 1016 0.119281 -0.165735

[4321 rows x 6 columns]

@pytest.mark.parametrize("engine", ["parquet", "csv"])
def test_s3_dataset(s3_base, s3so, paths, datasets, engine, df):

    # Copy files to mock s3 bucket
    files = {}
    for i, path in enumerate(paths):
        with open(path, "rb") as f:
            fbytes = f.read()
        fn = path.split(os.path.sep)[-1]
        files[fn] = BytesIO()
        files[fn].write(fbytes)
        files[fn].seek(0)

    if engine == "parquet":
        # Workaround for nvt#539. In order to avoid the
        # bug in Dask's `create_metadata_file`, we need
        # to manually generate a "_metadata" file here.
        # This can be removed after dask#7295 is merged
        # (see https://github.com/dask/dask/pull/7295)
        fn = "_metadata"
        files[fn] = BytesIO()
        meta = create_metadata_file(
            paths,
            engine="pyarrow",
            out_dir=False,
        )
        meta.write_metadata_file(files[fn])
        files[fn].seek(0)

    with s3_context(s3_base=s3_base, bucket=engine, files=files):

        # Create nvt.Dataset from mock s3 paths
        url = f"s3://{engine}" if engine == "parquet" else f"s3://{engine}/*"
      dataset = nvt.Dataset(url, engine=engine, storage_options=s3so)

tests/unit/test_s3.py:69:


nvtabular/io/dataset.py:289: in init
self.engine = ParquetDatasetEngine(
nvtabular/io/parquet.py:81: in init
cudf.io.read_parquet(f0, row_groups=0, row_group=0)
/usr/local/lib/python3.8/dist-packages/cudf/io/parquet.py:251: in read_parquet
return libparquet.read_parquet(
cudf/_lib/parquet.pyx:110: in cudf._lib.parquet.read_parquet
???
cudf/_lib/parquet.pyx:122: in cudf._lib.parquet.read_parquet
???


???
E FileNotFoundError: [Errno 2] No such file or directory: ['parquet/dataset-0.parquet']

cudf/_lib/io/utils.pyx:54: FileNotFoundError
---------------------------- Captured stderr setup -----------------------------
/usr/lib/python3/dist-packages/requests/init.py:89: RequestsDependencyWarning: urllib3 (1.26.4) or chardet (3.0.4) doesn't match a supported version!
warnings.warn("urllib3 ({}) or chardet ({}) doesn't match a supported "

  • Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
    127.0.0.1 - - [21/May/2021 20:19:55] "�[37mGET / HTTP/1.1�[0m" 200 -
    ----------------------------- Captured stderr call -----------------------------
    127.0.0.1 - - [21/May/2021 20:19:55] "�[37mPUT /parquet HTTP/1.1�[0m" 200 -
    127.0.0.1 - - [21/May/2021 20:19:55] "�[37mPUT /parquet/dataset-0.parquet HTTP/1.1�[0m" 200 -
    127.0.0.1 - - [21/May/2021 20:19:55] "�[37mPUT /parquet/dataset-1.parquet HTTP/1.1�[0m" 200 -
    127.0.0.1 - - [21/May/2021 20:19:55] "�[37mPUT /parquet/_metadata HTTP/1.1�[0m" 200 -
    127.0.0.1 - - [21/May/2021 20:19:56] "�[37mGET / HTTP/1.1�[0m" 200 -
    127.0.0.1 - - [21/May/2021 20:19:56] "�[37mGET /parquet?list-type=2&prefix=&delimiter=%2F&encoding-type=url HTTP/1.1�[0m" 200 -
    127.0.0.1 - - [21/May/2021 20:19:56] "�[37mGET /parquet/_metadata HTTP/1.1�[0m" 206 -
    127.0.0.1 - - [21/May/2021 20:19:56] "�[37mGET /parquet/_metadata HTTP/1.1�[0m" 206 -
    ______________________ test_tritonserver_inference_string ______________________

tmpdir = local('/tmp/pytest-of-jenkins/pytest-2/test_tritonserver_inference_st0')

@pytest.mark.skipif(_TRITON_SERVER_PATH is None, reason="Requires tritonserver on the path")
def test_tritonserver_inference_string(tmpdir):
    df = cudf.DataFrame({"user": ["aaaa", "bbbb", "cccc", "aaaa", "bbbb", "aaaa"]})
    features = ["user"] >> ops.Categorify()
    workflow = nvt.Workflow(features)

    # fit the workflow and test on the input
    dataset = nvt.Dataset(df)
    workflow.fit(dataset)

    local_df = workflow.transform(dataset).to_ddf().compute(scheduler="synchronous")
    model_name = "test_inference_string"
    triton.generate_nvtabular_model(workflow, model_name, tmpdir + "/test_inference_string")

    inputs = triton.convert_df_to_triton_input(["user"], df)
  with run_triton_server(tmpdir) as client:

tests/unit/test_triton_inference.py:63:


/usr/lib/python3.8/contextlib.py:113: in enter
return next(self.gen)


modelpath = local('/tmp/pytest-of-jenkins/pytest-2/test_tritonserver_inference_st0')

@contextlib.contextmanager
def run_triton_server(modelpath):
    cmdline = [_TRITON_SERVER_PATH, "--model-repository", modelpath]
    with subprocess.Popen(cmdline) as process:
        try:
            with grpcclient.InferenceServerClient("localhost:8001") as client:
                # wait until server is ready
                for _ in range(20):
                    try:
                        ready = client.is_server_ready()
                    except tritonclient.utils.InferenceServerException:
                        ready = False

                    if ready:
                        yield client
                        return

                    time.sleep(1)
              raise RuntimeError("Timed out waiting for tritonserver to become ready")

E RuntimeError: Timed out waiting for tritonserver to become ready

tests/unit/test_triton_inference.py:42: RuntimeError
----------------------------- Captured stdout call -----------------------------
Signal (2) received.
----------------------------- Captured stderr call -----------------------------
I0521 20:21:18.753899 23670 metrics.cc:221] Collecting metrics for GPU 0: Tesla P100-DGXS-16GB
I0521 20:21:18.761857 23670 metrics.cc:221] Collecting metrics for GPU 1: Tesla P100-DGXS-16GB
I0521 20:21:19.482356 23670 libtorch.cc:940] TRITONBACKEND_Initialize: pytorch
I0521 20:21:19.482388 23670 libtorch.cc:950] Triton TRITONBACKEND API version: 1.0
I0521 20:21:19.482394 23670 libtorch.cc:956] 'pytorch' TRITONBACKEND API version: 1.0
2021-05-21 20:21:19.829306: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcudart.so.11.0
I0521 20:21:20.069946 23670 tensorflow.cc:1880] TRITONBACKEND_Initialize: tensorflow
I0521 20:21:20.069976 23670 tensorflow.cc:1890] Triton TRITONBACKEND API version: 1.0
I0521 20:21:20.070646 23670 tensorflow.cc:1896] 'tensorflow' TRITONBACKEND API version: 1.0
I0521 20:21:20.070653 23670 tensorflow.cc:1920] backend configuration:
{}
I0521 20:21:20.095901 23670 onnxruntime.cc:1728] TRITONBACKEND_Initialize: onnxruntime
I0521 20:21:20.096572 23670 onnxruntime.cc:1738] Triton TRITONBACKEND API version: 1.0
I0521 20:21:20.096580 23670 onnxruntime.cc:1744] 'onnxruntime' TRITONBACKEND API version: 1.0
I0521 20:21:20.175210 23670 openvino.cc:1166] TRITONBACKEND_Initialize: openvino
I0521 20:21:20.175227 23670 openvino.cc:1176] Triton TRITONBACKEND API version: 1.0
I0521 20:21:20.175233 23670 openvino.cc:1182] 'openvino' TRITONBACKEND API version: 1.0
I0521 20:21:20.332781 23670 pinned_memory_manager.cc:205] Pinned memory pool is created at '0x7fad5c000000' with size 268435456
I0521 20:21:20.335017 23670 cuda_memory_manager.cc:103] CUDA memory pool is created on device 0 with size 67108864
I0521 20:21:20.335028 23670 cuda_memory_manager.cc:103] CUDA memory pool is created on device 1 with size 67108864
I0521 20:21:20.443117 23670 model_repository_manager.cc:1065] loading: test_inference_string:1
I0521 20:21:20.559379 23670 python.cc:604] TRITONBACKEND_ModelInstanceInitialize: test_inference_string (GPU device 0)
W0521 20:21:20.765436 23670 metrics.cc:322] failed to get energy consumption for GPU 0: Not Supported
W0521 20:21:20.769318 23670 metrics.cc:322] failed to get energy consumption for GPU 1: Not Supported
W0521 20:21:22.778813 23670 metrics.cc:322] failed to get energy consumption for GPU 0: Not Supported
W0521 20:21:22.787849 23670 metrics.cc:322] failed to get energy consumption for GPU 1: Not Supported
W0521 20:21:24.796826 23670 metrics.cc:322] failed to get energy consumption for GPU 0: Not Supported
W0521 20:21:24.805881 23670 metrics.cc:322] failed to get energy consumption for GPU 1: Not Supported
I0521 20:21:30.538842 23670 python.cc:604] TRITONBACKEND_ModelInstanceInitialize: test_inference_string (GPU device 1)
I0521 20:21:37.361946 23670 model_repository_manager.cc:1239] successfully loaded 'test_inference_string' version 1
I0521 20:21:37.362166 23670 server.cc:500]
+------------------+------+
| Repository Agent | Path |
+------------------+------+
+------------------+------+

I0521 20:21:37.362323 23670 server.cc:527]
+-------------+-----------------------------------------------------------------+--------+
| Backend | Path | Config |
+-------------+-----------------------------------------------------------------+--------+
| pytorch | /opt/tritonserver/backends/pytorch/libtriton_pytorch.so | {} |
| onnxruntime | /opt/tritonserver/backends/onnxruntime/libtriton_onnxruntime.so | {} |
| openvino | /opt/tritonserver/backends/openvino/libtriton_openvino.so | {} |
| tensorflow | /opt/tritonserver/backends/tensorflow1/libtriton_tensorflow1.so | {} |
| python | /opt/tritonserver/backends/python/libtriton_python.so | {} |
+-------------+-----------------------------------------------------------------+--------+

I0521 20:21:37.362392 23670 server.cc:570]
+-----------------------+---------+--------+
| Model | Version | Status |
+-----------------------+---------+--------+
| test_inference_string | 1 | READY |
+-----------------------+---------+--------+

I0521 20:21:37.362649 23670 tritonserver.cc:1658]
+----------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------+
| Option | Value |
+----------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------+
| server_id | triton |
| server_version | 2.8.0 |
| server_extensions | classification sequence model_repository schedule_policy model_configuration system_shared_memory cuda_shared_memory binary_tensor_data statistics |
| model_repository_path[0] | /tmp/pytest-of-jenkins/pytest-2/test_tritonserver_inference_st0 |
| model_control_mode | MODE_NONE |
| strict_model_config | 1 |
| pinned_memory_pool_byte_size | 268435456 |
| cuda_memory_pool_byte_size{0} | 67108864 |
| cuda_memory_pool_byte_size{1} | 67108864 |
| min_supported_compute_capability | 6.0 |
| strict_readiness | 1 |
| exit_timeout | 30 |
+----------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------+

I0521 20:21:37.373131 23670 grpc_server.cc:3983] Started GRPCInferenceService at 0.0.0.0:8001
I0521 20:21:37.373674 23670 http_server.cc:2717] Started HTTPService at 0.0.0.0:8000
I0521 20:21:37.415386 23670 http_server.cc:2736] Started Metrics Service at 0.0.0.0:8002
I0521 20:21:38.647060 23670 server.cc:233] Waiting for in-flight requests to complete.
I0521 20:21:38.647125 23670 model_repository_manager.cc:1098] unloading: test_inference_string:1
I0521 20:21:38.647274 23670 server.cc:248] Timeout 30: Found 1 live models and 0 in-flight non-inference requests
I0521 20:21:39.157403 23670 model_repository_manager.cc:1222] successfully unloaded 'test_inference_string' version 1
I0521 20:21:39.647375 23670 server.cc:248] Timeout 29: Found 0 live models and 0 in-flight non-inference requests
=============================== warnings summary ===============================
tests/unit/test_ops.py::test_groupby_op[id-False]
tests/unit/test_ops.py::test_groupby_op[id-True]
/usr/local/lib/python3.8/dist-packages/dask/dataframe/core.py:6560: UserWarning: Insufficient elements for head. 1 elements requested, only 0 elements available. Try passing larger npartitions to head.
warnings.warn(msg.format(n, len(r)))

-- Docs: https://docs.pytest.org/en/stable/warnings.html

----------- coverage: platform linux, python 3.8.5-final-0 -----------
Name Stmts Miss Branch BrPart Cover Missing

examples/multi-gpu-movielens/torch_trainer.py 65 0 6 1 99% 32->36
nvtabular/init.py 12 0 0 0 100%
nvtabular/column_group.py 157 18 82 5 87% 54, 87, 128, 152-165, 214, 301
nvtabular/dispatch.py 81 11 38 5 83% 35, 45->47, 69, 94, 111, 118, 135-138, 167-170
nvtabular/framework_utils/init.py 0 0 0 0 100%
nvtabular/framework_utils/tensorflow/init.py 1 0 0 0 100%
nvtabular/framework_utils/tensorflow/feature_column_utils.py 146 137 96 0 4% 28-32, 69-303
nvtabular/framework_utils/tensorflow/layers/init.py 4 0 0 0 100%
nvtabular/framework_utils/tensorflow/layers/embedding.py 153 13 83 7 90% 60, 68->49, 104, 112, 192, 244-252, 348->356, 370->373, 376-377, 380
nvtabular/framework_utils/tensorflow/layers/interaction.py 47 25 20 1 43% 49, 74-103, 106-110, 113
nvtabular/framework_utils/tensorflow/layers/outer_product.py 30 24 10 0 15% 37-38, 41-60, 71-84, 87
nvtabular/framework_utils/torch/init.py 0 0 0 0 100%
nvtabular/framework_utils/torch/layers/init.py 2 0 0 0 100%
nvtabular/framework_utils/torch/layers/embeddings.py 27 1 10 1 95% 47
nvtabular/framework_utils/torch/models.py 41 0 22 0 100%
nvtabular/framework_utils/torch/utils.py 32 4 10 2 86% 53, 57-59
nvtabular/inference/init.py 0 0 0 0 100%
nvtabular/inference/triton/init.py 279 150 120 16 46% 95-144, 187-247, 269-270, 275-278, 301-313, 321-326, 344, 363-379, 383-387, 462-484, 488-555, 564->567, 567->563, 596-606, 610-611, 615, 625, 631, 633, 635, 637, 639, 641, 643, 646, 650-656
nvtabular/inference/triton/model.py 50 50 18 0 0% 27-133
nvtabular/inference/triton/model_config_pb2.py 299 0 2 0 100%
nvtabular/inference/triton/model_hugectr.py 49 49 14 0 0% 27-125
nvtabular/inference/triton/model_pytorch.py 30 30 8 0 0% 27-89
nvtabular/io/init.py 4 0 0 0 100%
nvtabular/io/avro.py 88 88 30 0 0% 16-189
nvtabular/io/csv.py 54 4 20 5 88% 95, 99->103, 104, 106, 120
nvtabular/io/dask.py 179 7 68 11 93% 110, 113, 149, 224, 384->382, 412->415, 423, 427->429, 429->425, 434, 436
nvtabular/io/dataframe_engine.py 58 3 28 6 90% 47, 66, 85->89, 89->94, 91->94, 94->113, 122
nvtabular/io/dataset.py 263 31 124 21 86% 254, 256, 269, 278, 296-310, 413->482, 418-421, 426->436, 431-432, 443->441, 457->461, 472, 518, 639->641, 641->650, 651, 658-659, 665, 671, 766-767, 879-884, 890, 924
nvtabular/io/dataset_engine.py 23 1 0 0 96% 45
nvtabular/io/hugectr.py 45 2 24 2 91% 34, 74->97, 101
nvtabular/io/parquet.py 486 19 154 12 95% 85-93, 117->119, 206-208, 331-336, 374-379, 495->502, 563->568, 569-570, 690, 694, 698, 736, 753, 757, 764->766, 884->889, 894->904, 931
nvtabular/io/shuffle.py 30 4 12 3 83% 41, 43-44, 48
nvtabular/io/writer.py 168 11 64 5 92% 46, 74, 120, 123, 200, 209, 212, 255, 276-278
nvtabular/io/writer_factory.py 18 2 8 2 85% 35, 60
nvtabular/loader/init.py 0 0 0 0 100%
nvtabular/loader/backend.py 296 11 116 7 96% 131, 138-139, 224->226, 236-240, 286-287, 326->330, 401, 405-406, 507
nvtabular/loader/tensorflow.py 121 11 48 7 88% 56, 64-67, 77, 87, 283, 298-300, 310->314, 343
nvtabular/loader/tf_utils.py 55 10 20 5 80% 29->32, 32->34, 39->41, 43, 50-51, 58-60, 66-70
nvtabular/loader/torch.py 46 10 8 0 70% 25-27, 30-36
nvtabular/ops/init.py 21 0 0 0 100%
nvtabular/ops/bucketize.py 24 4 16 2 75% 45, 48-51
nvtabular/ops/categorify.py 516 65 300 44 85% 237, 254, 258, 266, 274, 276, 298, 317-318, 352-353, 415-417, 487->489, 562, 600, 629->632, 633-635, 642-643, 656-658, 659->627, 675, 685, 687, 693, 709-710, 715, 718->721, 731, 755, 760, 776-779, 805, 809, 811, 823-826, 941, 943, 985->1006, 991->1006, 1007-1012, 1049, 1065->1070, 1069, 1079->1076, 1084->1076, 1092, 1100-1110
nvtabular/ops/clip.py 19 2 6 3 80% 45, 53->55, 56
nvtabular/ops/column_similarity.py 88 22 32 5 69% 84, 156-157, 166-168, 176-192, 207->217, 209->212, 213, 223
nvtabular/ops/data_stats.py 57 2 22 3 94% 91->93, 95, 97->87, 102
nvtabular/ops/difference_lag.py 26 0 8 1 97% 67->69
nvtabular/ops/dropna.py 8 0 0 0 100%
nvtabular/ops/fill.py 58 2 20 1 96% 93, 119
nvtabular/ops/filter.py 21 1 6 1 93% 44
nvtabular/ops/groupby.py 93 4 56 6 92% 72, 81, 83, 93->95, 105->110, 181
nvtabular/ops/hash_bucket.py 32 2 18 2 88% 73, 102
nvtabular/ops/hashed_cross.py 29 3 13 4 83% 51, 64, 78->exit, 79
nvtabular/ops/join_external.py 69 4 28 4 92% 96, 98, 116, 168
nvtabular/ops/join_groupby.py 82 5 28 2 94% 106, 109->116, 185-186, 189-190
nvtabular/ops/lambdaop.py 27 3 10 3 84% 61, 65, 78
nvtabular/ops/list_slice.py 64 22 26 1 59% 52-53, 105-119, 127-138
nvtabular/ops/logop.py 9 0 0 0 100%
nvtabular/ops/moments.py 65 0 20 0 100%
nvtabular/ops/normalize.py 65 6 14 2 87% 61->60, 67-68, 101-102, 124-125
nvtabular/ops/operator.py 15 1 2 1 88% 24
nvtabular/ops/rename.py 23 3 14 3 84% 46, 67-69
nvtabular/ops/stat_operator.py 8 0 0 0 100%
nvtabular/ops/target_encoding.py 148 11 64 5 91% 143, 163->167, 170->179, 222-223, 226-227, 236-242, 333->336
nvtabular/tools/init.py 0 0 0 0 100%
nvtabular/tools/data_gen.py 236 1 62 2 99% 321->320, 323
nvtabular/tools/dataset_inspector.py 49 7 18 1 79% 31-38
nvtabular/tools/inspector_script.py 46 46 0 0 0% 17-168
nvtabular/utils.py 94 45 44 8 46% 30-31, 35-36, 49, 58-61, 63-65, 68, 71, 77, 83, 89-125, 144, 148->152
nvtabular/worker.py 68 1 30 2 97% 74->87, 94
nvtabular/workflow.py 143 9 65 4 93% 40, 126, 140-142, 245, 273-274, 351

TOTAL 5642 997 2185 234 80%
Coverage XML written to file coverage.xml

Required test coverage of 70% reached. Total coverage: 79.78%
=========================== short test summary info ============================
FAILED tests/unit/test_s3.py::test_s3_dataset[parquet] - FileNotFoundError: [...
FAILED tests/unit/test_triton_inference.py::test_tritonserver_inference_string
======= 2 failed, 792 passed, 9 skipped, 2 warnings in 608.51s (0:10:08) =======
Build step 'Execute shell' marked build as failure
Performing Post build task...
Match found for : : True
Logical operation result is TRUE
Running script : #!/bin/bash
cd /var/jenkins_home/
CUDA_VISIBLE_DEVICES=1 python test_res_push.py "https://github.com/gitapi/repos/NVIDIA/NVTabular/issues/$ghprbPullId/comments" "/var/jenkins_home/jobs/$JOB_NAME/builds/$BUILD_NUMBER/log"
[nvtabular_tests] $ /bin/bash /tmp/jenkins5733388380336158738.sh

@nvidia-merlin-bot
Copy link
Contributor

Click to view CI Results
GitHub pull request #839 of commit 8f7225381a4371243cc4134e0437f2f4c9fb944d, no merge conflicts.
Running as SYSTEM
Setting status of 8f7225381a4371243cc4134e0437f2f4c9fb944d to PENDING with url http://10.20.13.93:8080/job/nvtabular_tests/2459/ and message: 'Pending'
Using context: Jenkins Unit Test Run
Building in workspace /var/jenkins_home/workspace/nvtabular_tests
using credential nvidia-merlin-bot
Cloning the remote Git repository
Cloning repository https://github.com/NVIDIA/NVTabular.git
 > git init /var/jenkins_home/workspace/nvtabular_tests/nvtabular # timeout=10
Fetching upstream changes from https://github.com/NVIDIA/NVTabular.git
 > git --version # timeout=10
using GIT_ASKPASS to set credentials This is the bot credentials for our CI/CD
 > git fetch --tags --force --progress -- https://github.com/NVIDIA/NVTabular.git +refs/heads/*:refs/remotes/origin/* # timeout=10
 > git config remote.origin.url https://github.com/NVIDIA/NVTabular.git # timeout=10
 > git config --add remote.origin.fetch +refs/heads/*:refs/remotes/origin/* # timeout=10
 > git config remote.origin.url https://github.com/NVIDIA/NVTabular.git # timeout=10
Fetching upstream changes from https://github.com/NVIDIA/NVTabular.git
using GIT_ASKPASS to set credentials This is the bot credentials for our CI/CD
 > git fetch --tags --force --progress -- https://github.com/NVIDIA/NVTabular.git +refs/pull/839/*:refs/remotes/origin/pr/839/* # timeout=10
 > git rev-parse 8f7225381a4371243cc4134e0437f2f4c9fb944d^{commit} # timeout=10
Checking out Revision 8f7225381a4371243cc4134e0437f2f4c9fb944d (detached)
 > git config core.sparsecheckout # timeout=10
 > git checkout -f 8f7225381a4371243cc4134e0437f2f4c9fb944d # timeout=10
Commit message: "increase tritonserver timeout"
 > git rev-list --no-walk 8ad832f35d923e1f356973218191833828226391 # timeout=10
[nvtabular_tests] $ /bin/bash /tmp/jenkins1133839267040135247.sh
Installing NVTabular
Looking in indexes: https://pypi.org/simple, https://pypi.ngc.nvidia.com
Obtaining file:///var/jenkins_home/workspace/nvtabular_tests/nvtabular
  Installing build dependencies: started
  Installing build dependencies: finished with status 'done'
  Getting requirements to build wheel: started
  Getting requirements to build wheel: finished with status 'done'
    Preparing wheel metadata: started
    Preparing wheel metadata: finished with status 'done'
Installing collected packages: nvtabular
  Running setup.py develop for nvtabular
Successfully installed nvtabular
WARNING: You are using pip version 21.0.1; however, version 21.1.1 is available.
You should consider upgrading via the '/usr/bin/python -m pip install --upgrade pip' command.
Running black --check
All done! ✨ 🍰 ✨
106 files would be left unchanged.
Running flake8
Running isort
/usr/local/lib/python3.8/dist-packages/isort/main.py:141: UserWarning: Likely recursive symlink detected to /var/jenkins_home/workspace/nvtabular_tests/nvtabular/images
  warn(f"Likely recursive symlink detected to {resolved_path}")
/usr/local/lib/python3.8/dist-packages/isort/main.py:141: UserWarning: Likely recursive symlink detected to /var/jenkins_home/workspace/nvtabular_tests/nvtabular/examples/scaling-criteo/imgs
  warn(f"Likely recursive symlink detected to {resolved_path}")
Skipped 1 files
Running bandit
Running pylint

Your code has been rated at 10.00/10 (previous run: 10.00/10, +0.00)

Running flake8-nb
Building docs
make: Entering directory '/var/jenkins_home/workspace/nvtabular_tests/nvtabular/docs'
2021-05-21 20:26:26.457565: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcudart.so.11.0
2021-05-21 20:26:27.789005: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcuda.so.1
2021-05-21 20:26:27.790162: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1733] Found device 0 with properties:
pciBusID: 0000:07:00.0 name: Tesla P100-DGXS-16GB computeCapability: 6.0
coreClock: 1.4805GHz coreCount: 56 deviceMemorySize: 15.90GiB deviceMemoryBandwidth: 681.88GiB/s
2021-05-21 20:26:27.791189: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1733] Found device 1 with properties:
pciBusID: 0000:08:00.0 name: Tesla P100-DGXS-16GB computeCapability: 6.0
coreClock: 1.4805GHz coreCount: 56 deviceMemorySize: 15.90GiB deviceMemoryBandwidth: 681.88GiB/s
2021-05-21 20:26:27.791222: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcudart.so.11.0
2021-05-21 20:26:27.791282: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcublas.so.11
2021-05-21 20:26:27.791319: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcublasLt.so.11
2021-05-21 20:26:27.791358: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcufft.so.10
2021-05-21 20:26:27.791394: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcurand.so.10
2021-05-21 20:26:27.791464: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcusolver.so.11
2021-05-21 20:26:27.791503: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcusparse.so.11
2021-05-21 20:26:27.791525: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcudnn.so.8
2021-05-21 20:26:27.795876: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1871] Adding visible gpu devices: 0, 1
/usr/lib/python3/dist-packages/requests/init.py:89: RequestsDependencyWarning: urllib3 (1.26.4) or chardet (3.0.4) doesn't match a supported version!
warnings.warn("urllib3 ({}) or chardet ({}) doesn't match a supported "
/usr/local/lib/python3.8/dist-packages/recommonmark/parser.py:75: UserWarning: Container node skipped: type=document
warn("Container node skipped: type={0}".format(mdnode.t))
/usr/local/lib/python3.8/dist-packages/recommonmark/parser.py:75: UserWarning: Container node skipped: type=document
warn("Container node skipped: type={0}".format(mdnode.t))
/usr/local/lib/python3.8/dist-packages/recommonmark/parser.py:75: UserWarning: Container node skipped: type=document
warn("Container node skipped: type={0}".format(mdnode.t))
make: Leaving directory '/var/jenkins_home/workspace/nvtabular_tests/nvtabular/docs'
============================= test session starts ==============================
platform linux -- Python 3.8.5, pytest-6.2.4, py-1.10.0, pluggy-0.13.1
rootdir: /var/jenkins_home/workspace/nvtabular_tests/nvtabular, configfile: pyproject.toml
plugins: xdist-2.2.1, forked-1.3.0, cov-2.12.0
collected 803 items

tests/unit/test_column_group.py .. [ 0%]
tests/unit/test_column_similarity.py ...... [ 0%]
tests/unit/test_dask_nvt.py ............................................ [ 6%]
..................................................................... [ 15%]
tests/unit/test_dataloader_backend.py . [ 15%]
tests/unit/test_io.py .................................................. [ 21%]
..................................................................ssssss [ 30%]
ss.................................................. [ 36%]
tests/unit/test_notebooks.py ...... [ 37%]
tests/unit/test_ops.py ................................................. [ 43%]
........................................................................ [ 52%]
........................................................................ [ 61%]
............................................. [ 67%]
tests/unit/test_s3.py F. [ 67%]
tests/unit/test_tf_dataloader.py ................................s [ 71%]
tests/unit/test_tf_layers.py ........................................... [ 76%]
................................... [ 81%]
tests/unit/test_tools.py ...................... [ 84%]
tests/unit/test_torch_dataloader.py .................................. [ 88%]
tests/unit/test_triton_inference.py ... [ 88%]
tests/unit/test_workflow.py ............................................ [ 94%]
............................................... [100%]

=================================== FAILURES ===================================
___________________________ test_s3_dataset[parquet] ___________________________

s3_base = 'http://127.0.0.1:5000/'
s3so = {'client_kwargs': {'endpoint_url': 'http://127.0.0.1:5000/'}}
paths = ['/tmp/pytest-of-jenkins/pytest-3/parquet0/dataset-0.parquet', '/tmp/pytest-of-jenkins/pytest-3/parquet0/dataset-1.parquet']
datasets = {'cats': local('/tmp/pytest-of-jenkins/pytest-3/cats0'), 'csv': local('/tmp/pytest-of-jenkins/pytest-3/csv0'), 'csv-no... local('/tmp/pytest-of-jenkins/pytest-3/csv-no-header0'), 'parquet': local('/tmp/pytest-of-jenkins/pytest-3/parquet0')}
engine = 'parquet'
df = name-cat name-string id label x y
0 Tim Dan 949 945 0.228202 -0.496820
...in 1022 950 -0.157514 -0.252490
4320 Ursula Michael 1059 1008 -0.584744 0.904796

[4321 rows x 6 columns]

@pytest.mark.parametrize("engine", ["parquet", "csv"])
def test_s3_dataset(s3_base, s3so, paths, datasets, engine, df):

    # Copy files to mock s3 bucket
    files = {}
    for i, path in enumerate(paths):
        with open(path, "rb") as f:
            fbytes = f.read()
        fn = path.split(os.path.sep)[-1]
        files[fn] = BytesIO()
        files[fn].write(fbytes)
        files[fn].seek(0)

    if engine == "parquet":
        # Workaround for nvt#539. In order to avoid the
        # bug in Dask's `create_metadata_file`, we need
        # to manually generate a "_metadata" file here.
        # This can be removed after dask#7295 is merged
        # (see https://github.com/dask/dask/pull/7295)
        fn = "_metadata"
        files[fn] = BytesIO()
        meta = create_metadata_file(
            paths,
            engine="pyarrow",
            out_dir=False,
        )
        meta.write_metadata_file(files[fn])
        files[fn].seek(0)

    with s3_context(s3_base=s3_base, bucket=engine, files=files):

        # Create nvt.Dataset from mock s3 paths
        url = f"s3://{engine}" if engine == "parquet" else f"s3://{engine}/*"
      dataset = nvt.Dataset(url, engine=engine, storage_options=s3so)

tests/unit/test_s3.py:69:


nvtabular/io/dataset.py:289: in init
self.engine = ParquetDatasetEngine(
nvtabular/io/parquet.py:81: in init
cudf.io.read_parquet(f0, row_groups=0, row_group=0)
/usr/local/lib/python3.8/dist-packages/cudf/io/parquet.py:251: in read_parquet
return libparquet.read_parquet(
cudf/_lib/parquet.pyx:110: in cudf._lib.parquet.read_parquet
???
cudf/_lib/parquet.pyx:122: in cudf._lib.parquet.read_parquet
???


???
E FileNotFoundError: [Errno 2] No such file or directory: ['parquet/dataset-0.parquet']

cudf/_lib/io/utils.pyx:54: FileNotFoundError
---------------------------- Captured stderr setup -----------------------------
/usr/lib/python3/dist-packages/requests/init.py:89: RequestsDependencyWarning: urllib3 (1.26.4) or chardet (3.0.4) doesn't match a supported version!
warnings.warn("urllib3 ({}) or chardet ({}) doesn't match a supported "

  • Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
    127.0.0.1 - - [21/May/2021 20:34:10] "�[37mGET / HTTP/1.1�[0m" 200 -
    ----------------------------- Captured stderr call -----------------------------
    127.0.0.1 - - [21/May/2021 20:34:11] "�[37mPUT /parquet HTTP/1.1�[0m" 200 -
    127.0.0.1 - - [21/May/2021 20:34:11] "�[37mPUT /parquet/dataset-0.parquet HTTP/1.1�[0m" 200 -
    127.0.0.1 - - [21/May/2021 20:34:11] "�[37mPUT /parquet/dataset-1.parquet HTTP/1.1�[0m" 200 -
    127.0.0.1 - - [21/May/2021 20:34:11] "�[37mPUT /parquet/_metadata HTTP/1.1�[0m" 200 -
    127.0.0.1 - - [21/May/2021 20:34:11] "�[37mGET / HTTP/1.1�[0m" 200 -
    127.0.0.1 - - [21/May/2021 20:34:11] "�[37mGET /parquet?list-type=2&prefix=&delimiter=%2F&encoding-type=url HTTP/1.1�[0m" 200 -
    127.0.0.1 - - [21/May/2021 20:34:11] "�[37mGET /parquet/_metadata HTTP/1.1�[0m" 206 -
    127.0.0.1 - - [21/May/2021 20:34:11] "�[37mGET /parquet/_metadata HTTP/1.1�[0m" 206 -
    =============================== warnings summary ===============================
    tests/unit/test_ops.py::test_groupby_op[id-False]
    tests/unit/test_ops.py::test_groupby_op[id-True]
    /usr/local/lib/python3.8/dist-packages/dask/dataframe/core.py:6560: UserWarning: Insufficient elements for head. 1 elements requested, only 0 elements available. Try passing larger npartitions to head.
    warnings.warn(msg.format(n, len(r)))

-- Docs: https://docs.pytest.org/en/stable/warnings.html

----------- coverage: platform linux, python 3.8.5-final-0 -----------
Name Stmts Miss Branch BrPart Cover Missing

examples/multi-gpu-movielens/torch_trainer.py 65 0 6 1 99% 32->36
nvtabular/init.py 12 0 0 0 100%
nvtabular/column_group.py 157 18 82 5 87% 54, 87, 128, 152-165, 214, 301
nvtabular/dispatch.py 81 11 38 5 83% 35, 45->47, 69, 94, 111, 118, 135-138, 167-170
nvtabular/framework_utils/init.py 0 0 0 0 100%
nvtabular/framework_utils/tensorflow/init.py 1 0 0 0 100%
nvtabular/framework_utils/tensorflow/feature_column_utils.py 146 137 96 0 4% 28-32, 69-303
nvtabular/framework_utils/tensorflow/layers/init.py 4 0 0 0 100%
nvtabular/framework_utils/tensorflow/layers/embedding.py 153 13 83 7 90% 60, 68->49, 104, 112, 192, 244-252, 348->356, 370->373, 376-377, 380
nvtabular/framework_utils/tensorflow/layers/interaction.py 47 25 20 1 43% 49, 74-103, 106-110, 113
nvtabular/framework_utils/tensorflow/layers/outer_product.py 30 24 10 0 15% 37-38, 41-60, 71-84, 87
nvtabular/framework_utils/torch/init.py 0 0 0 0 100%
nvtabular/framework_utils/torch/layers/init.py 2 0 0 0 100%
nvtabular/framework_utils/torch/layers/embeddings.py 27 1 10 1 95% 47
nvtabular/framework_utils/torch/models.py 41 0 22 0 100%
nvtabular/framework_utils/torch/utils.py 32 4 10 2 86% 53, 57-59
nvtabular/inference/init.py 0 0 0 0 100%
nvtabular/inference/triton/init.py 279 144 120 18 48% 95-144, 187-247, 269-270, 275-278, 301-313, 321-326, 344, 363-379, 383-387, 462-484, 488-555, 564->567, 567->563, 596-606, 610-611, 615, 625, 631, 633, 635, 637, 639, 641, 643, 646, 651->654, 654->656
nvtabular/inference/triton/model.py 50 50 18 0 0% 27-133
nvtabular/inference/triton/model_config_pb2.py 299 0 2 0 100%
nvtabular/inference/triton/model_hugectr.py 49 49 14 0 0% 27-125
nvtabular/inference/triton/model_pytorch.py 30 30 8 0 0% 27-89
nvtabular/io/init.py 4 0 0 0 100%
nvtabular/io/avro.py 88 88 30 0 0% 16-189
nvtabular/io/csv.py 54 4 20 5 88% 95, 99->103, 104, 106, 120
nvtabular/io/dask.py 179 7 68 11 93% 110, 113, 149, 224, 384->382, 412->415, 423, 427->429, 429->425, 434, 436
nvtabular/io/dataframe_engine.py 58 3 28 6 90% 47, 66, 85->89, 89->94, 91->94, 94->113, 122
nvtabular/io/dataset.py 263 31 124 21 86% 254, 256, 269, 278, 296-310, 413->482, 418-421, 426->436, 431-432, 443->441, 457->461, 472, 518, 639->641, 641->650, 651, 658-659, 665, 671, 766-767, 879-884, 890, 924
nvtabular/io/dataset_engine.py 23 1 0 0 96% 45
nvtabular/io/hugectr.py 45 2 24 2 91% 34, 74->97, 101
nvtabular/io/parquet.py 486 19 154 12 95% 85-93, 117->119, 206-208, 331-336, 374-379, 495->502, 563->568, 569-570, 690, 694, 698, 736, 753, 757, 764->766, 884->889, 894->904, 931
nvtabular/io/shuffle.py 30 4 12 3 83% 41, 43-44, 48
nvtabular/io/writer.py 168 11 64 5 92% 46, 74, 120, 123, 200, 209, 212, 255, 276-278
nvtabular/io/writer_factory.py 18 2 8 2 85% 35, 60
nvtabular/loader/init.py 0 0 0 0 100%
nvtabular/loader/backend.py 296 11 116 7 96% 131, 138-139, 224->226, 236-240, 286-287, 326->330, 401, 405-406, 507
nvtabular/loader/tensorflow.py 121 11 48 7 88% 56, 64-67, 77, 87, 283, 298-300, 310->314, 343
nvtabular/loader/tf_utils.py 55 10 20 5 80% 29->32, 32->34, 39->41, 43, 50-51, 58-60, 66-70
nvtabular/loader/torch.py 46 10 8 0 70% 25-27, 30-36
nvtabular/ops/init.py 21 0 0 0 100%
nvtabular/ops/bucketize.py 24 4 16 2 75% 45, 48-51
nvtabular/ops/categorify.py 516 65 300 44 85% 237, 254, 258, 266, 274, 276, 298, 317-318, 352-353, 415-417, 487->489, 562, 600, 629->632, 633-635, 642-643, 656-658, 659->627, 675, 685, 687, 693, 709-710, 715, 718->721, 731, 755, 760, 776-779, 805, 809, 811, 823-826, 941, 943, 985->1006, 991->1006, 1007-1012, 1049, 1065->1070, 1069, 1079->1076, 1084->1076, 1092, 1100-1110
nvtabular/ops/clip.py 19 2 6 3 80% 45, 53->55, 56
nvtabular/ops/column_similarity.py 88 22 32 5 69% 84, 156-157, 166-168, 176-192, 207->217, 209->212, 213, 223
nvtabular/ops/data_stats.py 57 2 22 3 94% 91->93, 95, 97->87, 102
nvtabular/ops/difference_lag.py 26 0 8 1 97% 67->69
nvtabular/ops/dropna.py 8 0 0 0 100%
nvtabular/ops/fill.py 58 2 20 1 96% 93, 119
nvtabular/ops/filter.py 21 1 6 1 93% 44
nvtabular/ops/groupby.py 93 4 56 6 92% 72, 81, 83, 93->95, 105->110, 181
nvtabular/ops/hash_bucket.py 32 2 18 2 88% 73, 102
nvtabular/ops/hashed_cross.py 29 3 13 4 83% 51, 64, 78->exit, 79
nvtabular/ops/join_external.py 69 4 28 4 92% 96, 98, 116, 168
nvtabular/ops/join_groupby.py 82 5 28 2 94% 106, 109->116, 185-186, 189-190
nvtabular/ops/lambdaop.py 27 3 10 3 84% 61, 65, 78
nvtabular/ops/list_slice.py 64 22 26 1 59% 52-53, 105-119, 127-138
nvtabular/ops/logop.py 9 0 0 0 100%
nvtabular/ops/moments.py 65 0 20 0 100%
nvtabular/ops/normalize.py 65 6 14 2 87% 61->60, 67-68, 101-102, 124-125
nvtabular/ops/operator.py 15 1 2 1 88% 24
nvtabular/ops/rename.py 23 3 14 3 84% 46, 67-69
nvtabular/ops/stat_operator.py 8 0 0 0 100%
nvtabular/ops/target_encoding.py 148 11 64 5 91% 143, 163->167, 170->179, 222-223, 226-227, 236-242, 333->336
nvtabular/tools/init.py 0 0 0 0 100%
nvtabular/tools/data_gen.py 236 1 62 2 99% 321->320, 323
nvtabular/tools/dataset_inspector.py 49 7 18 1 79% 31-38
nvtabular/tools/inspector_script.py 46 46 0 0 0% 17-168
nvtabular/utils.py 94 45 44 8 46% 30-31, 35-36, 49, 58-61, 63-65, 68, 71, 77, 83, 89-125, 144, 148->152
nvtabular/worker.py 68 1 30 2 97% 74->87, 94
nvtabular/workflow.py 143 9 65 4 93% 40, 126, 140-142, 245, 273-274, 351

TOTAL 5642 991 2185 236 80%
Coverage XML written to file coverage.xml

Required test coverage of 70% reached. Total coverage: 79.88%
=========================== short test summary info ============================
FAILED tests/unit/test_s3.py::test_s3_dataset[parquet] - FileNotFoundError: [...
======= 1 failed, 793 passed, 9 skipped, 2 warnings in 614.94s (0:10:14) =======
Build step 'Execute shell' marked build as failure
Performing Post build task...
Match found for : : True
Logical operation result is TRUE
Running script : #!/bin/bash
cd /var/jenkins_home/
CUDA_VISIBLE_DEVICES=1 python test_res_push.py "https://github.com/gitapi/repos/NVIDIA/NVTabular/issues/$ghprbPullId/comments" "/var/jenkins_home/jobs/$JOB_NAME/builds/$BUILD_NUMBER/log"
[nvtabular_tests] $ /bin/bash /tmp/jenkins619875902873126036.sh

@nvidia-merlin-bot
Copy link
Contributor

Click to view CI Results
GitHub pull request #839 of commit 3af6bfa93435c0c528c26a382ffaecd9892aba29, no merge conflicts.
Running as SYSTEM
Setting status of 3af6bfa93435c0c528c26a382ffaecd9892aba29 to PENDING with url http://10.20.13.93:8080/job/nvtabular_tests/2462/ and message: 'Pending'
Using context: Jenkins Unit Test Run
Building in workspace /var/jenkins_home/workspace/nvtabular_tests
using credential nvidia-merlin-bot
Cloning the remote Git repository
Cloning repository https://github.com/NVIDIA/NVTabular.git
 > git init /var/jenkins_home/workspace/nvtabular_tests/nvtabular # timeout=10
Fetching upstream changes from https://github.com/NVIDIA/NVTabular.git
 > git --version # timeout=10
using GIT_ASKPASS to set credentials This is the bot credentials for our CI/CD
 > git fetch --tags --force --progress -- https://github.com/NVIDIA/NVTabular.git +refs/heads/*:refs/remotes/origin/* # timeout=10
 > git config remote.origin.url https://github.com/NVIDIA/NVTabular.git # timeout=10
 > git config --add remote.origin.fetch +refs/heads/*:refs/remotes/origin/* # timeout=10
 > git config remote.origin.url https://github.com/NVIDIA/NVTabular.git # timeout=10
Fetching upstream changes from https://github.com/NVIDIA/NVTabular.git
using GIT_ASKPASS to set credentials This is the bot credentials for our CI/CD
 > git fetch --tags --force --progress -- https://github.com/NVIDIA/NVTabular.git +refs/pull/839/*:refs/remotes/origin/pr/839/* # timeout=10
 > git rev-parse 3af6bfa93435c0c528c26a382ffaecd9892aba29^{commit} # timeout=10
Checking out Revision 3af6bfa93435c0c528c26a382ffaecd9892aba29 (detached)
 > git config core.sparsecheckout # timeout=10
 > git checkout -f 3af6bfa93435c0c528c26a382ffaecd9892aba29 # timeout=10
Commit message: "Merge branch 'main' into triton_string_fix"
 > git rev-list --no-walk f7750f979f3eed6d322ca34d2fd37e9ad7cc0ac8 # timeout=10
First time build. Skipping changelog.
[nvtabular_tests] $ /bin/bash /tmp/jenkins2954899999427953040.sh
Installing NVTabular
Looking in indexes: https://pypi.org/simple, https://pypi.ngc.nvidia.com
Obtaining file:///var/jenkins_home/workspace/nvtabular_tests/nvtabular
  Installing build dependencies: started
  Installing build dependencies: finished with status 'done'
  Getting requirements to build wheel: started
  Getting requirements to build wheel: finished with status 'done'
    Preparing wheel metadata: started
    Preparing wheel metadata: finished with status 'done'
Installing collected packages: nvtabular
  Running setup.py develop for nvtabular
Successfully installed nvtabular
WARNING: You are using pip version 21.0.1; however, version 21.1.1 is available.
You should consider upgrading via the '/usr/bin/python -m pip install --upgrade pip' command.
Running black --check
All done! ✨ 🍰 ✨
106 files would be left unchanged.
Running flake8
Running isort
/usr/local/lib/python3.8/dist-packages/isort/main.py:141: UserWarning: Likely recursive symlink detected to /var/jenkins_home/workspace/nvtabular_tests/nvtabular/images
  warn(f"Likely recursive symlink detected to {resolved_path}")
/usr/local/lib/python3.8/dist-packages/isort/main.py:141: UserWarning: Likely recursive symlink detected to /var/jenkins_home/workspace/nvtabular_tests/nvtabular/examples/scaling-criteo/imgs
  warn(f"Likely recursive symlink detected to {resolved_path}")
Skipped 1 files
Running bandit
Running pylint

Your code has been rated at 10.00/10 (previous run: 10.00/10, +0.00)

Running flake8-nb
Building docs
make: Entering directory '/var/jenkins_home/workspace/nvtabular_tests/nvtabular/docs'
2021-05-21 22:06:36.998572: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcudart.so.11.0
2021-05-21 22:06:38.338459: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcuda.so.1
2021-05-21 22:06:38.339622: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1733] Found device 0 with properties:
pciBusID: 0000:07:00.0 name: Tesla P100-DGXS-16GB computeCapability: 6.0
coreClock: 1.4805GHz coreCount: 56 deviceMemorySize: 15.90GiB deviceMemoryBandwidth: 681.88GiB/s
2021-05-21 22:06:38.340629: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1733] Found device 1 with properties:
pciBusID: 0000:08:00.0 name: Tesla P100-DGXS-16GB computeCapability: 6.0
coreClock: 1.4805GHz coreCount: 56 deviceMemorySize: 15.90GiB deviceMemoryBandwidth: 681.88GiB/s
2021-05-21 22:06:38.340659: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcudart.so.11.0
2021-05-21 22:06:38.340716: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcublas.so.11
2021-05-21 22:06:38.340752: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcublasLt.so.11
2021-05-21 22:06:38.340790: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcufft.so.10
2021-05-21 22:06:38.340824: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcurand.so.10
2021-05-21 22:06:38.340876: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcusolver.so.11
2021-05-21 22:06:38.340909: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcusparse.so.11
2021-05-21 22:06:38.340927: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcudnn.so.8
2021-05-21 22:06:38.344797: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1871] Adding visible gpu devices: 0, 1
/usr/lib/python3/dist-packages/requests/init.py:89: RequestsDependencyWarning: urllib3 (1.26.4) or chardet (3.0.4) doesn't match a supported version!
warnings.warn("urllib3 ({}) or chardet ({}) doesn't match a supported "
/usr/local/lib/python3.8/dist-packages/recommonmark/parser.py:75: UserWarning: Container node skipped: type=document
warn("Container node skipped: type={0}".format(mdnode.t))
/usr/local/lib/python3.8/dist-packages/recommonmark/parser.py:75: UserWarning: Container node skipped: type=document
warn("Container node skipped: type={0}".format(mdnode.t))
/usr/local/lib/python3.8/dist-packages/recommonmark/parser.py:75: UserWarning: Container node skipped: type=document
warn("Container node skipped: type={0}".format(mdnode.t))
make: Leaving directory '/var/jenkins_home/workspace/nvtabular_tests/nvtabular/docs'
============================= test session starts ==============================
platform linux -- Python 3.8.5, pytest-6.2.4, py-1.10.0, pluggy-0.13.1
rootdir: /var/jenkins_home/workspace/nvtabular_tests/nvtabular, configfile: pyproject.toml
plugins: xdist-2.2.1, forked-1.3.0, cov-2.12.0
collected 802 items

tests/unit/test_column_group.py .. [ 0%]
tests/unit/test_column_similarity.py ...... [ 0%]
tests/unit/test_dask_nvt.py ............................................ [ 6%]
..................................................................... [ 15%]
tests/unit/test_dataloader_backend.py . [ 15%]
tests/unit/test_io.py .................................................. [ 21%]
..................................................................ssssss [ 30%]
ss.................................................. [ 36%]
tests/unit/test_notebooks.py ...... [ 37%]
tests/unit/test_ops.py ................................................. [ 43%]
........................................................................ [ 52%]
........................................................................ [ 61%]
............................................. [ 67%]
tests/unit/test_s3.py . [ 67%]
tests/unit/test_tf_dataloader.py ................................s [ 71%]
tests/unit/test_tf_layers.py ........................................... [ 76%]
................................... [ 81%]
tests/unit/test_tools.py ...................... [ 84%]
tests/unit/test_torch_dataloader.py .................................. [ 88%]
tests/unit/test_triton_inference.py ... [ 88%]
tests/unit/test_workflow.py ............................................ [ 94%]
............................................... [100%]

=============================== warnings summary ===============================
tests/unit/test_ops.py::test_groupby_op[id-False]
tests/unit/test_ops.py::test_groupby_op[id-True]
/usr/local/lib/python3.8/dist-packages/dask/dataframe/core.py:6560: UserWarning: Insufficient elements for head. 1 elements requested, only 0 elements available. Try passing larger npartitions to head.
warnings.warn(msg.format(n, len(r)))

-- Docs: https://docs.pytest.org/en/stable/warnings.html

----------- coverage: platform linux, python 3.8.5-final-0 -----------
Name Stmts Miss Branch BrPart Cover Missing

examples/multi-gpu-movielens/torch_trainer.py 65 0 6 1 99% 32->36
nvtabular/init.py 12 0 0 0 100%
nvtabular/column_group.py 157 18 82 5 87% 54, 87, 128, 152-165, 214, 301
nvtabular/dispatch.py 81 11 38 5 83% 35, 45->47, 69, 94, 111, 118, 135-138, 167-170
nvtabular/framework_utils/init.py 0 0 0 0 100%
nvtabular/framework_utils/tensorflow/init.py 1 0 0 0 100%
nvtabular/framework_utils/tensorflow/feature_column_utils.py 146 137 96 0 4% 28-32, 69-303
nvtabular/framework_utils/tensorflow/layers/init.py 4 0 0 0 100%
nvtabular/framework_utils/tensorflow/layers/embedding.py 153 13 83 7 90% 60, 68->49, 104, 112, 192, 244-252, 348->356, 370->373, 376-377, 380
nvtabular/framework_utils/tensorflow/layers/interaction.py 47 25 20 1 43% 49, 74-103, 106-110, 113
nvtabular/framework_utils/tensorflow/layers/outer_product.py 30 24 10 0 15% 37-38, 41-60, 71-84, 87
nvtabular/framework_utils/torch/init.py 0 0 0 0 100%
nvtabular/framework_utils/torch/layers/init.py 2 0 0 0 100%
nvtabular/framework_utils/torch/layers/embeddings.py 27 1 10 1 95% 47
nvtabular/framework_utils/torch/models.py 41 0 22 0 100%
nvtabular/framework_utils/torch/utils.py 32 4 10 2 86% 53, 57-59
nvtabular/inference/init.py 0 0 0 0 100%
nvtabular/inference/triton/init.py 279 144 120 18 48% 95-144, 187-247, 269-270, 275-278, 301-313, 321-326, 344, 363-379, 383-387, 462-484, 488-555, 564->567, 567->563, 596-606, 610-611, 615, 625, 631, 633, 635, 637, 639, 641, 643, 646, 651->654, 654->656
nvtabular/inference/triton/model.py 50 50 18 0 0% 27-133
nvtabular/inference/triton/model_config_pb2.py 299 0 2 0 100%
nvtabular/inference/triton/model_hugectr.py 49 49 14 0 0% 27-125
nvtabular/inference/triton/model_pytorch.py 30 30 8 0 0% 27-89
nvtabular/io/init.py 4 0 0 0 100%
nvtabular/io/avro.py 88 88 30 0 0% 16-189
nvtabular/io/csv.py 54 4 20 5 88% 95, 99->103, 104, 106, 120
nvtabular/io/dask.py 179 7 68 11 93% 110, 113, 149, 224, 384->382, 412->415, 423, 427->429, 429->425, 434, 436
nvtabular/io/dataframe_engine.py 58 3 28 6 90% 47, 66, 85->89, 89->94, 91->94, 94->113, 122
nvtabular/io/dataset.py 263 31 124 21 86% 254, 256, 269, 278, 296-310, 413->482, 418-421, 426->436, 431-432, 443->441, 457->461, 472, 518, 639->641, 641->650, 651, 658-659, 665, 671, 766-767, 879-884, 890, 924
nvtabular/io/dataset_engine.py 23 1 0 0 96% 45
nvtabular/io/hugectr.py 45 2 24 2 91% 34, 74->97, 101
nvtabular/io/parquet.py 486 19 154 12 95% 85-93, 117->119, 206-208, 331-336, 374-379, 495->502, 563->568, 569-570, 690, 694, 698, 736, 753, 757, 764->766, 884->889, 894->904, 931
nvtabular/io/shuffle.py 30 4 12 3 83% 41, 43-44, 48
nvtabular/io/writer.py 168 11 64 5 92% 46, 74, 120, 123, 200, 209, 212, 255, 276-278
nvtabular/io/writer_factory.py 18 2 8 2 85% 35, 60
nvtabular/loader/init.py 0 0 0 0 100%
nvtabular/loader/backend.py 296 11 116 7 96% 131, 138-139, 224->226, 236-240, 286-287, 326->330, 401, 405-406, 507
nvtabular/loader/tensorflow.py 121 11 48 7 88% 56, 64-67, 77, 87, 283, 298-300, 310->314, 343
nvtabular/loader/tf_utils.py 55 10 20 5 80% 29->32, 32->34, 39->41, 43, 50-51, 58-60, 66-70
nvtabular/loader/torch.py 46 10 8 0 70% 25-27, 30-36
nvtabular/ops/init.py 21 0 0 0 100%
nvtabular/ops/bucketize.py 24 4 16 2 75% 45, 48-51
nvtabular/ops/categorify.py 516 65 300 44 85% 237, 254, 258, 266, 274, 276, 298, 317-318, 352-353, 415-417, 487->489, 562, 600, 629->632, 633-635, 642-643, 656-658, 659->627, 675, 685, 687, 693, 709-710, 715, 718->721, 731, 755, 760, 776-779, 805, 809, 811, 823-826, 941, 943, 985->1006, 991->1006, 1007-1012, 1049, 1065->1070, 1069, 1079->1076, 1084->1076, 1092, 1100-1110
nvtabular/ops/clip.py 19 2 6 3 80% 45, 53->55, 56
nvtabular/ops/column_similarity.py 88 22 32 5 69% 84, 156-157, 166-168, 176-192, 207->217, 209->212, 213, 223
nvtabular/ops/data_stats.py 57 2 22 3 94% 91->93, 95, 97->87, 102
nvtabular/ops/difference_lag.py 26 0 8 1 97% 67->69
nvtabular/ops/dropna.py 8 0 0 0 100%
nvtabular/ops/fill.py 58 2 20 1 96% 93, 119
nvtabular/ops/filter.py 21 1 6 1 93% 44
nvtabular/ops/groupby.py 93 4 56 6 92% 72, 81, 83, 93->95, 105->110, 181
nvtabular/ops/hash_bucket.py 32 2 18 2 88% 73, 102
nvtabular/ops/hashed_cross.py 29 3 13 4 83% 51, 64, 78->exit, 79
nvtabular/ops/join_external.py 69 4 28 4 92% 96, 98, 116, 168
nvtabular/ops/join_groupby.py 82 5 28 2 94% 106, 109->116, 185-186, 189-190
nvtabular/ops/lambdaop.py 27 3 10 3 84% 61, 65, 78
nvtabular/ops/list_slice.py 64 22 26 1 59% 52-53, 105-119, 127-138
nvtabular/ops/logop.py 9 0 0 0 100%
nvtabular/ops/moments.py 65 0 20 0 100%
nvtabular/ops/normalize.py 65 6 14 2 87% 61->60, 67-68, 101-102, 124-125
nvtabular/ops/operator.py 15 1 2 1 88% 24
nvtabular/ops/rename.py 23 3 14 3 84% 46, 67-69
nvtabular/ops/stat_operator.py 8 0 0 0 100%
nvtabular/ops/target_encoding.py 148 11 64 5 91% 143, 163->167, 170->179, 222-223, 226-227, 236-242, 333->336
nvtabular/tools/init.py 0 0 0 0 100%
nvtabular/tools/data_gen.py 236 1 62 2 99% 321->320, 323
nvtabular/tools/dataset_inspector.py 49 7 18 1 79% 31-38
nvtabular/tools/inspector_script.py 46 46 0 0 0% 17-168
nvtabular/utils.py 94 45 44 8 46% 30-31, 35-36, 49, 58-61, 63-65, 68, 71, 77, 83, 89-125, 144, 148->152
nvtabular/worker.py 68 1 30 2 97% 74->87, 94
nvtabular/workflow.py 143 9 65 4 93% 40, 126, 140-142, 245, 273-274, 351

TOTAL 5642 991 2185 236 80%
Coverage XML written to file coverage.xml

Required test coverage of 70% reached. Total coverage: 79.88%
============ 793 passed, 9 skipped, 2 warnings in 615.80s (0:10:15) ============
Performing Post build task...
Match found for : : True
Logical operation result is TRUE
Running script : #!/bin/bash
cd /var/jenkins_home/
CUDA_VISIBLE_DEVICES=1 python test_res_push.py "https://github.com/gitapi/repos/NVIDIA/NVTabular/issues/$ghprbPullId/comments" "/var/jenkins_home/jobs/$JOB_NAME/builds/$BUILD_NUMBER/log"
[nvtabular_tests] $ /bin/bash /tmp/jenkins6512968385048832394.sh

@benfred benfred merged commit 742ae2f into NVIDIA-Merlin:main May 21, 2021
@benfred benfred deleted the triton_string_fix branch May 21, 2021 22:22
mikemckiernan pushed a commit that referenced this pull request Nov 24, 2022
We're hitting an error like " Unsupported type_id conversion to cudf " when running any strings
through nvtabular inference with triton. Fix by converting the dtypes as appropiate in
_convert_tensor.

Also add a basic unittest that would have caught this error, launching tritonserver in a
subprocess and communicating through grpc
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[BUG] Unsupported type_id conversion to cudf
4 participants