Converting ssd_mobilenet_v2_mnasfpn to TensorRT

Hi JK,
First of all, thank you so much for all the work you've been putting into making TensorRT accessible for people like me! I honestly do not know what I would do without your reference code. :)
Here goes my question: Have you had any luck converting ssd_mobilenet_v2_mnasfpn to TensorRT? (I am aware MnasFPN was optimized rather for CPUs than for GPUs but in my application I was seeing much better accuracy than with ssd_mobilenet_v2. Plus, I also need to run my network on a CPU sometimes.)
Anyway, I extended your build_engine.py file to attempt the conversion but it didn't work. Judging from the logs, it's the MultiscaleGridAnchorGenerator that's causing the trouble and I've searched the entire internet for any pointers on how to solve this – to no avail. Do you happen to have an idea on how I could proceed here?
Thanks so much for your time!
--
For future reference, here's my code:
'ssd_mobilenet_v2_mnasfpn_custom': {
    'input_pb':   os.path.abspath(os.path.join(
                      DIR_NAME, 'ssd_mobilenet_v2_mnasfpn_custom.pb')),
    'tmp_uff':    os.path.abspath(os.path.join(
                      DIR_NAME, 'ssd_mobilenet_v2_mnasfpn_custom.uff')),
    'output_bin': os.path.abspath(os.path.join(
                      DIR_NAME, 'TRT_ssd_mobilenet_v2_custom.bin')),

    # Different shape than all other networks, so I created an input_dims
    # parameter for each model
    'input_dims': (3, 320, 320),

    # Again different than for all other models, so I moved it to a parameter, too.
    # I obtained it using an adapted version of
    # https://stackoverflow.com/questions/51742805/ssd-anchors-in-tensorflow-detection-api
    'feature_map_shapes': [40, 20, 10, 5],

    'num_classes': 3,  # 2 classes + background class
    'min_size': 0.2,
    'max_size': 0.95,
    'input_order': [1, 0, 2],  # order of loc_data, conf_data, priorbox_data
},

[TensorRT] ERROR: UffParser: Validator error: MultiscaleGridAnchorGenerator/GridAnchorGenerator_3/Meshgrid_2/ExpandedShape_1/ones: Unsupported operation _Fill

TensorFlow Object Detection API code base is constantly evolving.  Based on this error, I'd think the "MultiscaleGridAnchorGenerator" in the "ssd_mobilenet_v2_mnasfpn" has changed quite a bit from older versions of the API.
By the way, the "MultiscaleGridAnchorGenerator" is used to be called "MultipleGridAnchorGenerator" in the older version of TensorFlow Object Detection API.  Refer to this line of source code:
https://github.com/jkjung-avt/tensorrt_demos/blob/451208d77af78d66f0fcbd70802b8bea1701eb5e/ssd/build_engine.py#L227

[TensorRT] ERROR: UffParser: Validator error: MultiscaleGridAnchorGenerator/GridAnchorGenerator_3/Meshgrid_2/ExpandedShape_1/ones: Unsupported operation _Fill

TensorFlow Object Detection API code base is constantly evolving.  Based on this error, I'd think the "MultiscaleGridAnchorGenerator" in the "ssd_mobilenet_v2_mnasfpn" has changed quite a bit from older versions of the API.
By the way, the "MultiscaleGridAnchorGenerator" is used to be called "MultipleGridAnchorGenerator" in the older version of TensorFlow Object Detection API.  Refer to this line of source code:
https://github.com/jkjung-avt/tensorrt_demos/blob/451208d77af78d66f0fcbd70802b8bea1701eb5e/ssd/build_engine.py#L227

Hi JK, thanks so much for your quick response!
Are you sure MultiscaleGridAnchorGenerator and MultipleGridAnchorGenerator are referring to the same entity? As far as I can see, the TensorFlow Object Detection repository still contains both,
https://github.com/tensorflow/models/blob/master/research/object_detection/anchor_generators/multiscale_grid_anchor_generator.py
https://github.com/tensorflow/models/blob/master/research/object_detection/anchor_generators/multiple_grid_anchor_generator.py
and they look quite different. Or is it that MultiscaleGridAnchorGenerator evolved out of MultipleGridAnchorGenerator and the latter is only being kept in the Object Detection repo for legacy/compatibility purposes?
In any case, I'll try to adapt build_engine.py as you suggested and will get back to you as soon as possible!
Again, thank you so much!

Hi JK, thanks so much for your quick response!
Are you sure MultiscaleGridAnchorGenerator and MultipleGridAnchorGenerator are referring to the same entity? As far as I can see, the TensorFlow Object Detection repository still contains both,
https://github.com/tensorflow/models/blob/master/research/object_detection/anchor_generators/multiscale_grid_anchor_generator.py
https://github.com/tensorflow/models/blob/master/research/object_detection/anchor_generators/multiple_grid_anchor_generator.py
and they look quite different. Or is it that MultiscaleGridAnchorGenerator evolved out of MultipleGridAnchorGenerator and the latter is only being kept in the Object Detection repo for legacy/compatibility purposes?
In any case, I'll try to adapt build_engine.py as you suggested and will get back to you as soon as possible!
Again, thank you so much!

Or is it that MultiscaleGridAnchorGenerator evolved out of MultipleGridAnchorGenerator and the latter is only being kept in the Object Detection repo for legacy/compatibility purposes?

I think this is likely the case.

Or is it that MultiscaleGridAnchorGenerator evolved out of MultipleGridAnchorGenerator and the latter is only being kept in the Object Detection repo for legacy/compatibility purposes?

I think this is likely the case.

The naive adaptation of build_engine.py didn't do the trick, unfortunately:
$ python3 build_engine.py ssd_mobilenet_v2_mnasfpn_custom
2021-01-24 17:28:44.711358: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcudart.so.10.2
WARNING:tensorflow:Deprecation warnings have been disabled. Set TF_ENABLE_DEPRECATION_WARNINGS=1 to re-enable them.
NOTE: UFF has been tested with TensorFlow 1.15.0.
WARNING: The version of TensorFlow installed on this system is not guaranteed to work with UFF.
UFF Version 0.6.9
=== Automatically deduced input nodes ===
[name: "Input"
op: "Placeholder"
attr {
  key: "dtype"
  value {
    type: DT_FLOAT
  }
}
attr {
  key: "shape"
  value {
    shape {
      dim {
        size: 1
      }
      dim {
        size: 3
      }
      dim {
        size: 320
      }
      dim {
        size: 320
      }
    }
  }
}
]
=========================================

Using output node NMS
Converting to UFF graph
Warning: No conversion function registered for layer: NMS_TRT yet.
Converting NMS as custom op: NMS_TRT
WARNING:tensorflow:From /usr/lib/python3.6/dist-packages/uff/converters/tensorflow/converter.py:226: The name tf.AttrValue is deprecated. Please use tf.compat.v1.AttrValue instead.

Warning: No conversion function registered for layer: FlattenConcat_TRT yet.
Converting concat_box_conf as custom op: FlattenConcat_TRT
Warning: No conversion function registered for layer: FlattenConcat_TRT yet.
Converting concat_box_loc as custom op: FlattenConcat_TRT
Warning: No conversion function registered for layer: GridAnchor_TRT yet.
Converting MultiscaleGridAnchorGenerator as custom op: GridAnchor_TRT
DEBUG [/usr/lib/python3.6/dist-packages/uff/converters/tensorflow/converter.py:143] Marking ['NMS'] as outputs
No. nodes: 1185
UFF Output written to /home/user/tensorrt_demos/ssd/ssd_mobilenet_v2_mnasfpn_custom.uff
UFF Text Output written to /home/user/tensorrt_demos/ssd/ssd_mobilenet_v2_mnasfpn_custom.pbtxt
#assertiongridAnchorPlugin.cpp,445
Aborted (core dumped)

I should mention that the script was hanging at #assertiongridAnchorPlugin.cpp,445 for a couple minutes. Do you happen to know how I could debug this and find out where exactly things went wrong? Where does the core get dumped?
For definiteness, below is my modified build_engine.py. As discussed, I mapped MultiscaleGridAnchorGenerator to the GridAnchor_TRT op, similarly to MultipleGridAnchorGenerator:

"""build_engine.py

This script converts a SSD model (pb) to UFF and subsequently builds
the TensorRT engine.

Input : ssd_mobilenet_v[1|2]_[coco|egohands].pb
Output: TRT_ssd_mobilenet_v[1|2]_[coco|egohands].bin
"""

import os
import ctypes
import argparse

import numpy as np
import uff
import tensorrt as trt
import graphsurgeon as gs

DIR_NAME = os.path.dirname(__file__)
LIB_FILE = os.path.abspath(os.path.join(DIR_NAME, 'libflattenconcat.so'))
MODEL_SPECS = {
    'ssd_mobilenet_v1_coco': {
        'input_pb':   os.path.abspath(os.path.join(
                          DIR_NAME, 'ssd_mobilenet_v1_coco.pb')),
        'tmp_uff':    os.path.abspath(os.path.join(
                          DIR_NAME, 'ssd_mobilenet_v1_coco.uff')),
        'output_bin': os.path.abspath(os.path.join(
                          DIR_NAME, 'TRT_ssd_mobilenet_v1_coco.bin')),
        'input_dims': (3, 300, 300),
        'feature_map_shapes': [19, 10, 5, 3, 2, 1],
        'num_classes': 91,
        'min_size': 0.2,
        'max_size': 0.95,
        'input_order': [0, 2, 1],  # order of loc_data, conf_data, priorbox_data
    },
    'ssd_mobilenet_v1_egohands': {
        'input_pb':   os.path.abspath(os.path.join(
                          DIR_NAME, 'ssd_mobilenet_v1_egohands.pb')),
        'tmp_uff':    os.path.abspath(os.path.join(
                          DIR_NAME, 'ssd_mobilenet_v1_egohands.uff')),
        'output_bin': os.path.abspath(os.path.join(
                          DIR_NAME, 'TRT_ssd_mobilenet_v1_egohands.bin')),
        'input_dims': (3, 300, 300),
        'feature_map_shapes': [19, 10, 5, 3, 2, 1],
        'num_classes': 2,
        'min_size': 0.05,
        'max_size': 0.95,
        'input_order': [0, 2, 1],  # order of loc_data, conf_data, priorbox_data
    },
    'ssd_mobilenet_v2_coco': {
        'input_pb':   os.path.abspath(os.path.join(
                          DIR_NAME, 'ssd_mobilenet_v2_coco.pb')),
        'tmp_uff':    os.path.abspath(os.path.join(
                          DIR_NAME, 'ssd_mobilenet_v2_coco.uff')),
        'output_bin': os.path.abspath(os.path.join(
                          DIR_NAME, 'TRT_ssd_mobilenet_v2_coco.bin')),
        'input_dims': (3, 300, 300),
        'feature_map_shapes': [19, 10, 5, 3, 2, 1],
        'num_classes': 91,
        'min_size': 0.2,
        'max_size': 0.95,
        'input_order': [1, 0, 2],  # order of loc_data, conf_data, priorbox_data
    },
    'ssd_mobilenet_v2_egohands': {
        'input_pb':   os.path.abspath(os.path.join(
                          DIR_NAME, 'ssd_mobilenet_v2_egohands.pb')),
        'tmp_uff':    os.path.abspath(os.path.join(
                          DIR_NAME, 'ssd_mobilenet_v2_egohands.uff')),
        'output_bin': os.path.abspath(os.path.join(
                          DIR_NAME, 'TRT_ssd_mobilenet_v2_egohands.bin')),
        'input_dims': (3, 300, 300),
        'feature_map_shapes': [19, 10, 5, 3, 2, 1],
        'num_classes': 2,
        'min_size': 0.05,
        'max_size': 0.95,
        'input_order': [0, 2, 1],  # order of loc_data, conf_data, priorbox_data
    },
    'ssd_mobilenet_v2_mnasfpn_custom': {
        'input_pb':   os.path.abspath(os.path.join(
                          DIR_NAME, 'ssd_mobilenet_v2_mnasfpn_custom.pb')),
        'tmp_uff':    os.path.abspath(os.path.join(
                          DIR_NAME, 'ssd_mobilenet_v2_mnasfpn_custom.uff')),
        'output_bin': os.path.abspath(os.path.join(
                          DIR_NAME, 'TRT_ssd_mobilenet_v2_custom.bin')),
        'input_dims': (3, 320, 320),
        'feature_map_shapes': [40, 20, 10, 5],
        'num_classes': 3, # = 2+1
        'min_size': 0.2,
        'max_size': 0.95,
        'input_order': [1, 0, 2],  # order of loc_data, conf_data, priorbox_data
    },
    'ssd_inception_v2_coco': {
        'input_pb':   os.path.abspath(os.path.join(
                          DIR_NAME, 'ssd_inception_v2_coco.pb')),
        'tmp_uff':    os.path.abspath(os.path.join(
                          DIR_NAME, 'ssd_inception_v2_coco.uff')),
        'output_bin': os.path.abspath(os.path.join(
                          DIR_NAME, 'TRT_ssd_inception_v2_coco.bin')),
        'input_dims': (3, 300, 300),
        'feature_map_shapes': [19, 10, 5, 3, 2, 1],
        'num_classes': 91,
        'min_size': 0.2,
        'max_size': 0.95,
        'input_order': [0, 2, 1],  # order of loc_data, conf_data, priorbox_data
    },
    'ssdlite_mobilenet_v2_coco': {
        'input_pb':   os.path.abspath(os.path.join(
                          DIR_NAME, 'ssdlite_mobilenet_v2_coco.pb')),
        'tmp_uff':    os.path.abspath(os.path.join(
                          DIR_NAME, 'ssdlite_mobilenet_v2_coco.uff')),
        'output_bin': os.path.abspath(os.path.join(
                          DIR_NAME, 'TRT_ssdlite_mobilenet_v2_coco.bin')),
        'input_dims': (3, 300, 300),
        'feature_map_shapes': [19, 10, 5, 3, 2, 1],
        'num_classes': 91,
        'min_size': 0.2,
        'max_size': 0.95,
        'input_order': [0, 2, 1],  # order of loc_data, conf_data, priorbox_data
    },
}
DEBUG_UFF = False

def replace_addv2(graph):
    """Replace all 'AddV2' in the graph with 'Add'.

    'AddV2' is not supported by UFF parser.

    Reference:
    1. https://github.com/jkjung-avt/tensorrt_demos/issues/113#issuecomment-629900809
    """
    for node in graph.find_nodes_by_op('AddV2'):
        gs.update_node(node, op='Add')
    return graph

def replace_fusedbnv3(graph):
    """Replace all 'FusedBatchNormV3' in the graph with 'FusedBatchNorm'.

    'FusedBatchNormV3' is not supported by UFF parser.

    Reference:
    1. https://devtalk.nvidia.com/default/topic/1066445/tensorrt/tensorrt-6-0-1-tensorflow-1-14-no-conversion-function-registered-for-layer-fusedbatchnormv3-yet/post/5403567/#5403567
    2. https://github.com/jkjung-avt/tensorrt_demos/issues/76#issuecomment-607879831
    """
    for node in graph.find_nodes_by_op('FusedBatchNormV3'):
        gs.update_node(node, op='FusedBatchNorm')
    return graph

def add_anchor_input(graph):
    """Add the missing const input for the GridAnchor node.

    Reference:
    1. https://www.minds.ai/post/deploying-ssd-mobilenet-v2-on-the-nvidia-jetson-and-nano-platforms
    """
    data = np.array([1, 1], dtype=np.float32)
    anchor_input = gs.create_node('AnchorInput', 'Const', value=data)
    graph.append(anchor_input)
    graph.find_nodes_by_op('GridAnchor_TRT')[0].input.insert(0, 'AnchorInput')
    return graph

def add_plugin(graph, model, spec):
    """add_plugin

    Reference:
    1. https://github.com/AastaNV/TRT_object_detection/blob/master/config/model_ssd_mobilenet_v1_coco_2018_01_28.py
    2. https://github.com/AastaNV/TRT_object_detection/blob/master/config/model_ssd_mobilenet_v2_coco_2018_03_29.py
    3. https://devtalk.nvidia.com/default/topic/1050465/jetson-nano/how-to-write-config-py-for-converting-ssd-mobilenetv2-to-uff-format/post/5333033/#5333033
    """
    numClasses = spec['num_classes']
    minSize = spec['min_size']
    maxSize = spec['max_size']
    inputOrder = spec['input_order']

    all_assert_nodes = graph.find_nodes_by_op('Assert')
    graph.remove(all_assert_nodes, remove_exclusive_dependencies=True)

    all_identity_nodes = graph.find_nodes_by_op('Identity')
    graph.forward_inputs(all_identity_nodes)

    Input = gs.create_plugin_node(
        name='Input',
        op='Placeholder',
        shape=(1,) + spec['input_dims']
    )

    PriorBox_MultipleGridAnchorGenerator = gs.create_plugin_node(
        name='MultipleGridAnchorGenerator',
        op='GridAnchor_TRT',
        minSize=minSize,  # was 0.2
        maxSize=maxSize,  # was 0.95
        aspectRatios=[1.0, 2.0, 0.5, 3.0, 0.33],
        variance=[0.1, 0.1, 0.2, 0.2],
        featureMapShapes=spec['feature_map_shapes'],
        numLayers=6
    )
    PriorBox_MultiscaleGridAnchorGenerator = gs.create_plugin_node(
        name='MultiscaleGridAnchorGenerator',
        op='GridAnchor_TRT',
        minSize=minSize,  # was 0.2
        maxSize=maxSize,  # was 0.95
        aspectRatios=[1.0, 2.0, 0.5, 3.0, 0.33],
        variance=[0.1, 0.1, 0.2, 0.2],
        featureMapShapes=spec['feature_map_shapes'],
        numLayers=6
    )

    NMS = gs.create_plugin_node(
        name='NMS',
        op='NMS_TRT',
        shareLocation=1,
        varianceEncodedInTarget=0,
        backgroundLabelId=0,
        confidenceThreshold=0.3,  # was 1e-8
        nmsThreshold=0.6,
        topK=100,
        keepTopK=100,
        numClasses=numClasses,  # was 91
        inputOrder=inputOrder,
        confSigmoid=1,
        isNormalized=1
    )

    concat_priorbox = gs.create_node(
        'concat_priorbox',
        op='ConcatV2',
        axis=2
    )

    if trt.__version__[0] >= '7':
        concat_box_loc = gs.create_plugin_node(
            'concat_box_loc',
            op='FlattenConcat_TRT',
            axis=1,
            ignoreBatch=0
        )
        concat_box_conf = gs.create_plugin_node(
            'concat_box_conf',
            op='FlattenConcat_TRT',
            axis=1,
            ignoreBatch=0
        )
    else:
        concat_box_loc = gs.create_plugin_node(
            'concat_box_loc',
            op='FlattenConcat_TRT'
        )
        concat_box_conf = gs.create_plugin_node(
            'concat_box_conf',
            op='FlattenConcat_TRT'
        )

    namespace_for_removal = [
        'ToFloat',
        'image_tensor',
        'Preprocessor/map/TensorArrayStack_1/TensorArrayGatherV3',
    ]
    namespace_plugin_map = {
        'MultipleGridAnchorGenerator': PriorBox_MultipleGridAnchorGenerator,
        'MultiscaleGridAnchorGenerator': PriorBox_MultiscaleGridAnchorGenerator,
        'Postprocessor': NMS,
        'Preprocessor': Input,
        'ToFloat': Input,
        'Cast': Input,  # added for models trained with tf 1.15+
        'image_tensor': Input,
        'MultipleGridAnchorGenerator/Concatenate': concat_priorbox,  # for 'ssd_mobilenet_v1_coco'
        'Concatenate': concat_priorbox,  # for other models
        'concat': concat_box_loc,
        'concat_1': concat_box_conf
    }

    graph.remove(graph.find_nodes_by_path(['Preprocessor/map/TensorArrayStack_1/TensorArrayGatherV3']), remove_exclusive_dependencies=False)  # for 'ssd_inception_v2_coco'

    graph.collapse_namespaces(namespace_plugin_map)
    graph = replace_addv2(graph)
    graph = replace_fusedbnv3(graph)

    if 'image_tensor:0' in graph.find_nodes_by_name('Input')[0].input:
        graph.find_nodes_by_name('Input')[0].input.remove('image_tensor:0')
    if 'Input' in graph.find_nodes_by_name('NMS')[0].input:
        graph.find_nodes_by_name('NMS')[0].input.remove('Input')
    # Remove the Squeeze to avoid "Assertion 'isPlugin(layerName)' failed"
    graph.forward_inputs(graph.find_node_inputs_by_name(graph.graph_outputs[0], 'Squeeze'))
    if 'anchors' in [node.name for node in graph.graph_outputs]:
        graph.remove('anchors', remove_exclusive_dependencies=False)
    if len(graph.find_nodes_by_op('GridAnchor_TRT')[0].input) < 1:
        graph = add_anchor_input(graph)
    if 'NMS' not in [node.name for node in graph.graph_outputs]:
        graph.remove(graph.graph_outputs, remove_exclusive_dependencies=False)
        if 'NMS' not in [node.name for node in graph.graph_outputs]:
            # We expect 'NMS' to be one of the outputs
            raise RuntimeError('bad graph_outputs')

    return graph

def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('model', type=str, choices=list(MODEL_SPECS.keys()))
    args = parser.parse_args()

    # initialize
    if trt.__version__[0] < '7':
        ctypes.CDLL(LIB_FILE)
    TRT_LOGGER = trt.Logger(trt.Logger.INFO)
    trt.init_libnvinfer_plugins(TRT_LOGGER, '')

    # compile the model into TensorRT engine
    model = args.model
    spec = MODEL_SPECS[model]
    dynamic_graph = add_plugin(
        gs.DynamicGraph(spec['input_pb']),
        model,
        spec)
    _ = uff.from_tensorflow(
        dynamic_graph.as_graph_def(),
        output_nodes=['NMS'],
        output_filename=spec['tmp_uff'],
        text=True,
        debug_mode=DEBUG_UFF)
    with trt.Builder(TRT_LOGGER) as builder, builder.create_network() as network, trt.UffParser() as parser:
        builder.max_workspace_size = 1 << 28
        builder.max_batch_size = 1
        builder.fp16_mode = True

        parser.register_input('Input', spec['input_dims'])
        parser.register_output('MarkOutput_0')
        parser.parse(spec['tmp_uff'], network)
        engine = builder.build_cuda_engine(network)

        buf = engine.serialize()
        with open(spec['output_bin'], 'wb') as f:
            f.write(buf)

if __name__ == '__main__':
    main()

The naive adaptation of build_engine.py didn't do the trick, unfortunately:
$ python3 build_engine.py ssd_mobilenet_v2_mnasfpn_custom
2021-01-24 17:28:44.711358: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcudart.so.10.2
WARNING:tensorflow:Deprecation warnings have been disabled. Set TF_ENABLE_DEPRECATION_WARNINGS=1 to re-enable them.
NOTE: UFF has been tested with TensorFlow 1.15.0.
WARNING: The version of TensorFlow installed on this system is not guaranteed to work with UFF.
UFF Version 0.6.9
=== Automatically deduced input nodes ===
[name: "Input"
op: "Placeholder"
attr {
  key: "dtype"
  value {
    type: DT_FLOAT
  }
}
attr {
  key: "shape"
  value {
    shape {
      dim {
        size: 1
      }
      dim {
        size: 3
      }
      dim {
        size: 320
      }
      dim {
        size: 320
      }
    }
  }
}
]
=========================================

Using output node NMS
Converting to UFF graph
Warning: No conversion function registered for layer: NMS_TRT yet.
Converting NMS as custom op: NMS_TRT
WARNING:tensorflow:From /usr/lib/python3.6/dist-packages/uff/converters/tensorflow/converter.py:226: The name tf.AttrValue is deprecated. Please use tf.compat.v1.AttrValue instead.

Warning: No conversion function registered for layer: FlattenConcat_TRT yet.
Converting concat_box_conf as custom op: FlattenConcat_TRT
Warning: No conversion function registered for layer: FlattenConcat_TRT yet.
Converting concat_box_loc as custom op: FlattenConcat_TRT
Warning: No conversion function registered for layer: GridAnchor_TRT yet.
Converting MultiscaleGridAnchorGenerator as custom op: GridAnchor_TRT
DEBUG [/usr/lib/python3.6/dist-packages/uff/converters/tensorflow/converter.py:143] Marking ['NMS'] as outputs
No. nodes: 1185
UFF Output written to /home/user/tensorrt_demos/ssd/ssd_mobilenet_v2_mnasfpn_custom.uff
UFF Text Output written to /home/user/tensorrt_demos/ssd/ssd_mobilenet_v2_mnasfpn_custom.pbtxt
#assertiongridAnchorPlugin.cpp,445
Aborted (core dumped)

I should mention that the script was hanging at #assertiongridAnchorPlugin.cpp,445 for a couple minutes. Do you happen to know how I could debug this and find out where exactly things went wrong? Where does the core get dumped?
For definiteness, below is my modified build_engine.py. As discussed, I mapped MultiscaleGridAnchorGenerator to the GridAnchor_TRT op, similarly to MultipleGridAnchorGenerator:

"""build_engine.py

This script converts a SSD model (pb) to UFF and subsequently builds
the TensorRT engine.

Input : ssd_mobilenet_v[1|2]_[coco|egohands].pb
Output: TRT_ssd_mobilenet_v[1|2]_[coco|egohands].bin
"""

import os
import ctypes
import argparse

import numpy as np
import uff
import tensorrt as trt
import graphsurgeon as gs

DIR_NAME = os.path.dirname(__file__)
LIB_FILE = os.path.abspath(os.path.join(DIR_NAME, 'libflattenconcat.so'))
MODEL_SPECS = {
    'ssd_mobilenet_v1_coco': {
        'input_pb':   os.path.abspath(os.path.join(
                          DIR_NAME, 'ssd_mobilenet_v1_coco.pb')),
        'tmp_uff':    os.path.abspath(os.path.join(
                          DIR_NAME, 'ssd_mobilenet_v1_coco.uff')),
        'output_bin': os.path.abspath(os.path.join(
                          DIR_NAME, 'TRT_ssd_mobilenet_v1_coco.bin')),
        'input_dims': (3, 300, 300),
        'feature_map_shapes': [19, 10, 5, 3, 2, 1],
        'num_classes': 91,
        'min_size': 0.2,
        'max_size': 0.95,
        'input_order': [0, 2, 1],  # order of loc_data, conf_data, priorbox_data
    },
    'ssd_mobilenet_v1_egohands': {
        'input_pb':   os.path.abspath(os.path.join(
                          DIR_NAME, 'ssd_mobilenet_v1_egohands.pb')),
        'tmp_uff':    os.path.abspath(os.path.join(
                          DIR_NAME, 'ssd_mobilenet_v1_egohands.uff')),
        'output_bin': os.path.abspath(os.path.join(
                          DIR_NAME, 'TRT_ssd_mobilenet_v1_egohands.bin')),
        'input_dims': (3, 300, 300),
        'feature_map_shapes': [19, 10, 5, 3, 2, 1],
        'num_classes': 2,
        'min_size': 0.05,
        'max_size': 0.95,
        'input_order': [0, 2, 1],  # order of loc_data, conf_data, priorbox_data
    },
    'ssd_mobilenet_v2_coco': {
        'input_pb':   os.path.abspath(os.path.join(
                          DIR_NAME, 'ssd_mobilenet_v2_coco.pb')),
        'tmp_uff':    os.path.abspath(os.path.join(
                          DIR_NAME, 'ssd_mobilenet_v2_coco.uff')),
        'output_bin': os.path.abspath(os.path.join(
                          DIR_NAME, 'TRT_ssd_mobilenet_v2_coco.bin')),
        'input_dims': (3, 300, 300),
        'feature_map_shapes': [19, 10, 5, 3, 2, 1],
        'num_classes': 91,
        'min_size': 0.2,
        'max_size': 0.95,
        'input_order': [1, 0, 2],  # order of loc_data, conf_data, priorbox_data
    },
    'ssd_mobilenet_v2_egohands': {
        'input_pb':   os.path.abspath(os.path.join(
                          DIR_NAME, 'ssd_mobilenet_v2_egohands.pb')),
        'tmp_uff':    os.path.abspath(os.path.join(
                          DIR_NAME, 'ssd_mobilenet_v2_egohands.uff')),
        'output_bin': os.path.abspath(os.path.join(
                          DIR_NAME, 'TRT_ssd_mobilenet_v2_egohands.bin')),
        'input_dims': (3, 300, 300),
        'feature_map_shapes': [19, 10, 5, 3, 2, 1],
        'num_classes': 2,
        'min_size': 0.05,
        'max_size': 0.95,
        'input_order': [0, 2, 1],  # order of loc_data, conf_data, priorbox_data
    },
    'ssd_mobilenet_v2_mnasfpn_custom': {
        'input_pb':   os.path.abspath(os.path.join(
                          DIR_NAME, 'ssd_mobilenet_v2_mnasfpn_custom.pb')),
        'tmp_uff':    os.path.abspath(os.path.join(
                          DIR_NAME, 'ssd_mobilenet_v2_mnasfpn_custom.uff')),
        'output_bin': os.path.abspath(os.path.join(
                          DIR_NAME, 'TRT_ssd_mobilenet_v2_custom.bin')),
        'input_dims': (3, 320, 320),
        'feature_map_shapes': [40, 20, 10, 5],
        'num_classes': 3, # = 2+1
        'min_size': 0.2,
        'max_size': 0.95,
        'input_order': [1, 0, 2],  # order of loc_data, conf_data, priorbox_data
    },
    'ssd_inception_v2_coco': {
        'input_pb':   os.path.abspath(os.path.join(
                          DIR_NAME, 'ssd_inception_v2_coco.pb')),
        'tmp_uff':    os.path.abspath(os.path.join(
                          DIR_NAME, 'ssd_inception_v2_coco.uff')),
        'output_bin': os.path.abspath(os.path.join(
                          DIR_NAME, 'TRT_ssd_inception_v2_coco.bin')),
        'input_dims': (3, 300, 300),
        'feature_map_shapes': [19, 10, 5, 3, 2, 1],
        'num_classes': 91,
        'min_size': 0.2,
        'max_size': 0.95,
        'input_order': [0, 2, 1],  # order of loc_data, conf_data, priorbox_data
    },
    'ssdlite_mobilenet_v2_coco': {
        'input_pb':   os.path.abspath(os.path.join(
                          DIR_NAME, 'ssdlite_mobilenet_v2_coco.pb')),
        'tmp_uff':    os.path.abspath(os.path.join(
                          DIR_NAME, 'ssdlite_mobilenet_v2_coco.uff')),
        'output_bin': os.path.abspath(os.path.join(
                          DIR_NAME, 'TRT_ssdlite_mobilenet_v2_coco.bin')),
        'input_dims': (3, 300, 300),
        'feature_map_shapes': [19, 10, 5, 3, 2, 1],
        'num_classes': 91,
        'min_size': 0.2,
        'max_size': 0.95,
        'input_order': [0, 2, 1],  # order of loc_data, conf_data, priorbox_data
    },
}
DEBUG_UFF = False

def replace_addv2(graph):
    """Replace all 'AddV2' in the graph with 'Add'.

    'AddV2' is not supported by UFF parser.

    Reference:
    1. https://github.com/jkjung-avt/tensorrt_demos/issues/113#issuecomment-629900809
    """
    for node in graph.find_nodes_by_op('AddV2'):
        gs.update_node(node, op='Add')
    return graph

def replace_fusedbnv3(graph):
    """Replace all 'FusedBatchNormV3' in the graph with 'FusedBatchNorm'.

    'FusedBatchNormV3' is not supported by UFF parser.

    Reference:
    1. https://devtalk.nvidia.com/default/topic/1066445/tensorrt/tensorrt-6-0-1-tensorflow-1-14-no-conversion-function-registered-for-layer-fusedbatchnormv3-yet/post/5403567/#5403567
    2. https://github.com/jkjung-avt/tensorrt_demos/issues/76#issuecomment-607879831
    """
    for node in graph.find_nodes_by_op('FusedBatchNormV3'):
        gs.update_node(node, op='FusedBatchNorm')
    return graph

def add_anchor_input(graph):
    """Add the missing const input for the GridAnchor node.

    Reference:
    1. https://www.minds.ai/post/deploying-ssd-mobilenet-v2-on-the-nvidia-jetson-and-nano-platforms
    """
    data = np.array([1, 1], dtype=np.float32)
    anchor_input = gs.create_node('AnchorInput', 'Const', value=data)
    graph.append(anchor_input)
    graph.find_nodes_by_op('GridAnchor_TRT')[0].input.insert(0, 'AnchorInput')
    return graph

def add_plugin(graph, model, spec):
    """add_plugin

    Reference:
    1. https://github.com/AastaNV/TRT_object_detection/blob/master/config/model_ssd_mobilenet_v1_coco_2018_01_28.py
    2. https://github.com/AastaNV/TRT_object_detection/blob/master/config/model_ssd_mobilenet_v2_coco_2018_03_29.py
    3. https://devtalk.nvidia.com/default/topic/1050465/jetson-nano/how-to-write-config-py-for-converting-ssd-mobilenetv2-to-uff-format/post/5333033/#5333033
    """
    numClasses = spec['num_classes']
    minSize = spec['min_size']
    maxSize = spec['max_size']
    inputOrder = spec['input_order']

    all_assert_nodes = graph.find_nodes_by_op('Assert')
    graph.remove(all_assert_nodes, remove_exclusive_dependencies=True)

    all_identity_nodes = graph.find_nodes_by_op('Identity')
    graph.forward_inputs(all_identity_nodes)

    Input = gs.create_plugin_node(
        name='Input',
        op='Placeholder',
        shape=(1,) + spec['input_dims']
    )

    PriorBox_MultipleGridAnchorGenerator = gs.create_plugin_node(
        name='MultipleGridAnchorGenerator',
        op='GridAnchor_TRT',
        minSize=minSize,  # was 0.2
        maxSize=maxSize,  # was 0.95
        aspectRatios=[1.0, 2.0, 0.5, 3.0, 0.33],
        variance=[0.1, 0.1, 0.2, 0.2],
        featureMapShapes=spec['feature_map_shapes'],
        numLayers=6
    )
    PriorBox_MultiscaleGridAnchorGenerator = gs.create_plugin_node(
        name='MultiscaleGridAnchorGenerator',
        op='GridAnchor_TRT',
        minSize=minSize,  # was 0.2
        maxSize=maxSize,  # was 0.95
        aspectRatios=[1.0, 2.0, 0.5, 3.0, 0.33],
        variance=[0.1, 0.1, 0.2, 0.2],
        featureMapShapes=spec['feature_map_shapes'],
        numLayers=6
    )

    NMS = gs.create_plugin_node(
        name='NMS',
        op='NMS_TRT',
        shareLocation=1,
        varianceEncodedInTarget=0,
        backgroundLabelId=0,
        confidenceThreshold=0.3,  # was 1e-8
        nmsThreshold=0.6,
        topK=100,
        keepTopK=100,
        numClasses=numClasses,  # was 91
        inputOrder=inputOrder,
        confSigmoid=1,
        isNormalized=1
    )

    concat_priorbox = gs.create_node(
        'concat_priorbox',
        op='ConcatV2',
        axis=2
    )

    if trt.__version__[0] >= '7':
        concat_box_loc = gs.create_plugin_node(
            'concat_box_loc',
            op='FlattenConcat_TRT',
            axis=1,
            ignoreBatch=0
        )
        concat_box_conf = gs.create_plugin_node(
            'concat_box_conf',
            op='FlattenConcat_TRT',
            axis=1,
            ignoreBatch=0
        )
    else:
        concat_box_loc = gs.create_plugin_node(
            'concat_box_loc',
            op='FlattenConcat_TRT'
        )
        concat_box_conf = gs.create_plugin_node(
            'concat_box_conf',
            op='FlattenConcat_TRT'
        )

    namespace_for_removal = [
        'ToFloat',
        'image_tensor',
        'Preprocessor/map/TensorArrayStack_1/TensorArrayGatherV3',
    ]
    namespace_plugin_map = {
        'MultipleGridAnchorGenerator': PriorBox_MultipleGridAnchorGenerator,
        'MultiscaleGridAnchorGenerator': PriorBox_MultiscaleGridAnchorGenerator,
        'Postprocessor': NMS,
        'Preprocessor': Input,
        'ToFloat': Input,
        'Cast': Input,  # added for models trained with tf 1.15+
        'image_tensor': Input,
        'MultipleGridAnchorGenerator/Concatenate': concat_priorbox,  # for 'ssd_mobilenet_v1_coco'
        'Concatenate': concat_priorbox,  # for other models
        'concat': concat_box_loc,
        'concat_1': concat_box_conf
    }

    graph.remove(graph.find_nodes_by_path(['Preprocessor/map/TensorArrayStack_1/TensorArrayGatherV3']), remove_exclusive_dependencies=False)  # for 'ssd_inception_v2_coco'

    graph.collapse_namespaces(namespace_plugin_map)
    graph = replace_addv2(graph)
    graph = replace_fusedbnv3(graph)

    if 'image_tensor:0' in graph.find_nodes_by_name('Input')[0].input:
        graph.find_nodes_by_name('Input')[0].input.remove('image_tensor:0')
    if 'Input' in graph.find_nodes_by_name('NMS')[0].input:
        graph.find_nodes_by_name('NMS')[0].input.remove('Input')
    # Remove the Squeeze to avoid "Assertion 'isPlugin(layerName)' failed"
    graph.forward_inputs(graph.find_node_inputs_by_name(graph.graph_outputs[0], 'Squeeze'))
    if 'anchors' in [node.name for node in graph.graph_outputs]:
        graph.remove('anchors', remove_exclusive_dependencies=False)
    if len(graph.find_nodes_by_op('GridAnchor_TRT')[0].input) < 1:
        graph = add_anchor_input(graph)
    if 'NMS' not in [node.name for node in graph.graph_outputs]:
        graph.remove(graph.graph_outputs, remove_exclusive_dependencies=False)
        if 'NMS' not in [node.name for node in graph.graph_outputs]:
            # We expect 'NMS' to be one of the outputs
            raise RuntimeError('bad graph_outputs')

    return graph

def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('model', type=str, choices=list(MODEL_SPECS.keys()))
    args = parser.parse_args()

    # initialize
    if trt.__version__[0] < '7':
        ctypes.CDLL(LIB_FILE)
    TRT_LOGGER = trt.Logger(trt.Logger.INFO)
    trt.init_libnvinfer_plugins(TRT_LOGGER, '')

    # compile the model into TensorRT engine
    model = args.model
    spec = MODEL_SPECS[model]
    dynamic_graph = add_plugin(
        gs.DynamicGraph(spec['input_pb']),
        model,
        spec)
    _ = uff.from_tensorflow(
        dynamic_graph.as_graph_def(),
        output_nodes=['NMS'],
        output_filename=spec['tmp_uff'],
        text=True,
        debug_mode=DEBUG_UFF)
    with trt.Builder(TRT_LOGGER) as builder, builder.create_network() as network, trt.UffParser() as parser:
        builder.max_workspace_size = 1 << 28
        builder.max_batch_size = 1
        builder.fp16_mode = True

        parser.register_input('Input', spec['input_dims'])
        parser.register_output('MarkOutput_0')
        parser.parse(spec['tmp_uff'], network)
        engine = builder.build_cuda_engine(network)

        buf = engine.serialize()
        with open(spec['output_bin'], 'wb') as f:
            f.write(buf)

if __name__ == '__main__':
    main()

Never mind my previous comment, I had made a mistake and it does seem to work to some degree – I'm now getting a much "nicer" error (see below).
My mistake was that, if I understand the grid anchor plugin's README correctly, the numLayers parameter must be the length of the given featureMapShapes list. I've adjusted my code accordingly:
    PriorBox_MultiscaleGridAnchorGenerator = gs.create_plugin_node(
        name='MultiscaleGridAnchorGenerator',
        op='GridAnchor_TRT',
        minSize=minSize,  # was 0.2
        maxSize=maxSize,  # was 0.95
        aspectRatios=[1.0, 2.0, 0.5, 3.0, 0.33],
        variance=[0.1, 0.1, 0.2, 0.2],
        featureMapShapes=spec['feature_map_shapes'],
        numLayers=len(spec['feature_map_shapes']),
    )

(Once again, I'm attaching the full code for definiteness.)
The script now fails at the following step:
[TensorRT] VERBOSE: UFFParser: Parsing FeatureExtractor/MnasFPN/cell_0/block_0/input_1/Conv1x1/weights[Op: Const].
[TensorRT] VERBOSE: UFFParser: FeatureExtractor/MnasFPN/cell_0/block_0/input_1/Conv1x1/weights -> [1,1,256,208]
[TensorRT] VERBOSE: UFFParser: Applying order forwarding to: FeatureExtractor/MnasFPN/cell_0/block_0/input_1/Conv1x1/weights
[TensorRT] VERBOSE: UFFParser: Parsing FeatureExtractor/MnasFPN/cell_0/block_0/input_1/Conv1x1/Conv2D[Op: Conv]. Inputs: FeatureExtractor/MobilenetV2/expanded_conv_16/project/BatchNorm/FusedBatchNormV3, FeatureExtractor/MnasFPN/cell_0/block_0/input_1/Conv1x1/weights
[TensorRT] VERBOSE: UFFParser: FeatureExtractor/MnasFPN/cell_0/block_0/input_1/Conv1x1/Conv2D -> [208,10,10]
[TensorRT] VERBOSE: UFFParser: Applying order forwarding to: FeatureExtractor/MnasFPN/cell_0/block_0/input_1/Conv1x1/Conv2D
[TensorRT] VERBOSE: UFFParser: Parsing FeatureExtractor/MnasFPN/cell_0/block_0/input_1/Conv1x1/BatchNorm/gamma[Op: Const].
[TensorRT] VERBOSE: UFFParser: FeatureExtractor/MnasFPN/cell_0/block_0/input_1/Conv1x1/BatchNorm/gamma -> [208]
[TensorRT] VERBOSE: UFFParser: Applying order forwarding to: FeatureExtractor/MnasFPN/cell_0/block_0/input_1/Conv1x1/BatchNorm/gamma
[TensorRT] VERBOSE: UFFParser: Parsing FeatureExtractor/MnasFPN/cell_0/block_0/input_1/Conv1x1/BatchNorm/beta[Op: Const].
[TensorRT] VERBOSE: UFFParser: FeatureExtractor/MnasFPN/cell_0/block_0/input_1/Conv1x1/BatchNorm/beta -> [208]
[TensorRT] VERBOSE: UFFParser: Applying order forwarding to: FeatureExtractor/MnasFPN/cell_0/block_0/input_1/Conv1x1/BatchNorm/beta
[TensorRT] VERBOSE: UFFParser: Parsing FeatureExtractor/MnasFPN/cell_0/block_0/input_1/Conv1x1/BatchNorm/moving_mean[Op: Const].
[TensorRT] VERBOSE: UFFParser: FeatureExtractor/MnasFPN/cell_0/block_0/input_1/Conv1x1/BatchNorm/moving_mean -> [208]
[TensorRT] VERBOSE: UFFParser: Applying order forwarding to: FeatureExtractor/MnasFPN/cell_0/block_0/input_1/Conv1x1/BatchNorm/moving_mean
[TensorRT] VERBOSE: UFFParser: Parsing FeatureExtractor/MnasFPN/cell_0/block_0/input_1/Conv1x1/BatchNorm/moving_variance[Op: Const].
[TensorRT] VERBOSE: UFFParser: FeatureExtractor/MnasFPN/cell_0/block_0/input_1/Conv1x1/BatchNorm/moving_variance -> [208]
[TensorRT] VERBOSE: UFFParser: Applying order forwarding to: FeatureExtractor/MnasFPN/cell_0/block_0/input_1/Conv1x1/BatchNorm/moving_variance
[TensorRT] VERBOSE: UFFParser: Parsing FeatureExtractor/MnasFPN/cell_0/block_0/input_1/Conv1x1/BatchNorm/FusedBatchNormV3[Op: BatchNorm]. Inputs: FeatureExtractor/MnasFPN/cell_0/block_0/input_1/Conv1x1/Conv2D, FeatureExtractor/MnasFPN/cell_0/block_0/input_1/Conv1x1/BatchNorm/gamma, FeatureExtractor/MnasFPN/cell_0/block_0/input_1/Conv1x1/BatchNorm/beta, FeatureExtractor/MnasFPN/cell_0/block_0/input_1/Conv1x1/BatchNorm/moving_mean, FeatureExtractor/MnasFPN/cell_0/block_0/input_1/Conv1x1/BatchNorm/moving_variance
[TensorRT] VERBOSE: UFFParser: FeatureExtractor/MnasFPN/cell_0/block_0/input_1/Conv1x1/BatchNorm/FusedBatchNormV3 -> [208,10,10]
[TensorRT] VERBOSE: UFFParser: Applying order forwarding to: FeatureExtractor/MnasFPN/cell_0/block_0/input_1/Conv1x1/BatchNorm/FusedBatchNormV3
[TensorRT] VERBOSE: UFFParser: Parsing FeatureExtractor/MnasFPN/cell_0/block_0/input_1/nearest_neighbor_upsampling/stack[Op: Stack]. Inputs: FeatureExtractor/MnasFPN/cell_0/block_0/input_1/Conv1x1/BatchNorm/FusedBatchNormV3, FeatureExtractor/MnasFPN/cell_0/block_0/input_1/Conv1x1/BatchNorm/FusedBatchNormV3
[TensorRT] ERROR: UffParser: Parser error: FeatureExtractor/MnasFPN/cell_0/block_0/input_1/nearest_neighbor_upsampling/stack: stack only support for Constants nodes as input for now
[TensorRT] ERROR: Network must have at least one output
[TensorRT] ERROR: Network validation failed.
Traceback (most recent call last):
  File "build_engine.py", line 344, in <module>
    main()
  File "build_engine.py", line 338, in main
    buf = engine.serialize()
AttributeError: 'NoneType' object has no attribute 'serialize'

(Full logs)
Unfortunately, I seem to have reached a dead end if interpret this answer on the Nvidia forums correctly. :(

Never mind my previous comment, I had made a mistake and it does seem to work to some degree – I'm now getting a much "nicer" error (see below).
My mistake was that, if I understand the grid anchor plugin's README correctly, the numLayers parameter must be the length of the given featureMapShapes list. I've adjusted my code accordingly:
    PriorBox_MultiscaleGridAnchorGenerator = gs.create_plugin_node(
        name='MultiscaleGridAnchorGenerator',
        op='GridAnchor_TRT',
        minSize=minSize,  # was 0.2
        maxSize=maxSize,  # was 0.95
        aspectRatios=[1.0, 2.0, 0.5, 3.0, 0.33],
        variance=[0.1, 0.1, 0.2, 0.2],
        featureMapShapes=spec['feature_map_shapes'],
        numLayers=len(spec['feature_map_shapes']),
    )

(Once again, I'm attaching the full code for definiteness.)
The script now fails at the following step:
[TensorRT] VERBOSE: UFFParser: Parsing FeatureExtractor/MnasFPN/cell_0/block_0/input_1/Conv1x1/weights[Op: Const].
[TensorRT] VERBOSE: UFFParser: FeatureExtractor/MnasFPN/cell_0/block_0/input_1/Conv1x1/weights -> [1,1,256,208]
[TensorRT] VERBOSE: UFFParser: Applying order forwarding to: FeatureExtractor/MnasFPN/cell_0/block_0/input_1/Conv1x1/weights
[TensorRT] VERBOSE: UFFParser: Parsing FeatureExtractor/MnasFPN/cell_0/block_0/input_1/Conv1x1/Conv2D[Op: Conv]. Inputs: FeatureExtractor/MobilenetV2/expanded_conv_16/project/BatchNorm/FusedBatchNormV3, FeatureExtractor/MnasFPN/cell_0/block_0/input_1/Conv1x1/weights
[TensorRT] VERBOSE: UFFParser: FeatureExtractor/MnasFPN/cell_0/block_0/input_1/Conv1x1/Conv2D -> [208,10,10]
[TensorRT] VERBOSE: UFFParser: Applying order forwarding to: FeatureExtractor/MnasFPN/cell_0/block_0/input_1/Conv1x1/Conv2D
[TensorRT] VERBOSE: UFFParser: Parsing FeatureExtractor/MnasFPN/cell_0/block_0/input_1/Conv1x1/BatchNorm/gamma[Op: Const].
[TensorRT] VERBOSE: UFFParser: FeatureExtractor/MnasFPN/cell_0/block_0/input_1/Conv1x1/BatchNorm/gamma -> [208]
[TensorRT] VERBOSE: UFFParser: Applying order forwarding to: FeatureExtractor/MnasFPN/cell_0/block_0/input_1/Conv1x1/BatchNorm/gamma
[TensorRT] VERBOSE: UFFParser: Parsing FeatureExtractor/MnasFPN/cell_0/block_0/input_1/Conv1x1/BatchNorm/beta[Op: Const].
[TensorRT] VERBOSE: UFFParser: FeatureExtractor/MnasFPN/cell_0/block_0/input_1/Conv1x1/BatchNorm/beta -> [208]
[TensorRT] VERBOSE: UFFParser: Applying order forwarding to: FeatureExtractor/MnasFPN/cell_0/block_0/input_1/Conv1x1/BatchNorm/beta
[TensorRT] VERBOSE: UFFParser: Parsing FeatureExtractor/MnasFPN/cell_0/block_0/input_1/Conv1x1/BatchNorm/moving_mean[Op: Const].
[TensorRT] VERBOSE: UFFParser: FeatureExtractor/MnasFPN/cell_0/block_0/input_1/Conv1x1/BatchNorm/moving_mean -> [208]
[TensorRT] VERBOSE: UFFParser: Applying order forwarding to: FeatureExtractor/MnasFPN/cell_0/block_0/input_1/Conv1x1/BatchNorm/moving_mean
[TensorRT] VERBOSE: UFFParser: Parsing FeatureExtractor/MnasFPN/cell_0/block_0/input_1/Conv1x1/BatchNorm/moving_variance[Op: Const].
[TensorRT] VERBOSE: UFFParser: FeatureExtractor/MnasFPN/cell_0/block_0/input_1/Conv1x1/BatchNorm/moving_variance -> [208]
[TensorRT] VERBOSE: UFFParser: Applying order forwarding to: FeatureExtractor/MnasFPN/cell_0/block_0/input_1/Conv1x1/BatchNorm/moving_variance
[TensorRT] VERBOSE: UFFParser: Parsing FeatureExtractor/MnasFPN/cell_0/block_0/input_1/Conv1x1/BatchNorm/FusedBatchNormV3[Op: BatchNorm]. Inputs: FeatureExtractor/MnasFPN/cell_0/block_0/input_1/Conv1x1/Conv2D, FeatureExtractor/MnasFPN/cell_0/block_0/input_1/Conv1x1/BatchNorm/gamma, FeatureExtractor/MnasFPN/cell_0/block_0/input_1/Conv1x1/BatchNorm/beta, FeatureExtractor/MnasFPN/cell_0/block_0/input_1/Conv1x1/BatchNorm/moving_mean, FeatureExtractor/MnasFPN/cell_0/block_0/input_1/Conv1x1/BatchNorm/moving_variance
[TensorRT] VERBOSE: UFFParser: FeatureExtractor/MnasFPN/cell_0/block_0/input_1/Conv1x1/BatchNorm/FusedBatchNormV3 -> [208,10,10]
[TensorRT] VERBOSE: UFFParser: Applying order forwarding to: FeatureExtractor/MnasFPN/cell_0/block_0/input_1/Conv1x1/BatchNorm/FusedBatchNormV3
[TensorRT] VERBOSE: UFFParser: Parsing FeatureExtractor/MnasFPN/cell_0/block_0/input_1/nearest_neighbor_upsampling/stack[Op: Stack]. Inputs: FeatureExtractor/MnasFPN/cell_0/block_0/input_1/Conv1x1/BatchNorm/FusedBatchNormV3, FeatureExtractor/MnasFPN/cell_0/block_0/input_1/Conv1x1/BatchNorm/FusedBatchNormV3
[TensorRT] ERROR: UffParser: Parser error: FeatureExtractor/MnasFPN/cell_0/block_0/input_1/nearest_neighbor_upsampling/stack: stack only support for Constants nodes as input for now
[TensorRT] ERROR: Network must have at least one output
[TensorRT] ERROR: Network validation failed.
Traceback (most recent call last):
  File "build_engine.py", line 344, in <module>
    main()
  File "build_engine.py", line 338, in main
    buf = engine.serialize()
AttributeError: 'NoneType' object has no attribute 'serialize'

(Full logs)
Unfortunately, I seem to have reached a dead end if interpret this answer on the Nvidia forums correctly. :(

[TensorRT] ERROR: UffParser: Parser error: FeatureExtractor/MnasFPN/cell_0/block_0/input_1/nearest_neighbor_upsampling/stack: stack only support for Constants nodes as input for now

The "Stack" op could probably be replaced by a couple of "Reshape"s and a "Concat".  If you are able to use graphsurgeon to modify the graph, it might be worth a try.
Reference: https://stackoverflow.com/questions/41534593/why-would-i-ever-use-tf-concat-instead-of-tf-stack

[TensorRT] ERROR: UffParser: Parser error: FeatureExtractor/MnasFPN/cell_0/block_0/input_1/nearest_neighbor_upsampling/stack: stack only support for Constants nodes as input for now

The "Stack" op could probably be replaced by a couple of "Reshape"s and a "Concat".  If you are able to use graphsurgeon to modify the graph, it might be worth a try.
Reference: https://stackoverflow.com/questions/41534593/why-would-i-ever-use-tf-concat-instead-of-tf-stack

Oops, forgot to answer. I'll be giving ONNX a shot in the coming days. If that fails, I'll try to replace the Stack op. Thanks so much for your help so far! I'll report back!


Fixing some small typos

Please merge if ready.

Acrolinx Scorecards
A minimum Acrolinx score of 80 is required.
Click the scorecard links for each article to review the Acrolinx feedback on grammar, spelling, punctuation, writing style, and terminology.

Article
Acrolinxscore
Lowestcategoryscore
Spellingissues
Scorecard
Processed

articles/install-guide/csinstall.md
98
91
0
link
:white_check_mark:

More information about Acrolinx

Install Acrolinx locally for VSCode
False positives or issues
Troubleshooting issues with Acrolinx

Docs Build status updates of commit 70c3150:
:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

articles/install-guide/csinstall.md
:white_check_mark:Succeeded
View

For more details, please refer to the build report.
Note: If you changed an existing file name or deleted a file, broken links in other files to the deleted or renamed file are listed only in the full build report.


[PORT] Update task 'Create Microsoft.Bot.Builder.TestBot.zip' to netcoreapp3.1

Port this change from botbuilder-dotnet/master branch:
https://github.com/microsoft/botbuilder-dotnet/pull/3330

Closing as not relevant


Building sources + contact info

Hello!
I tried pushing an update that added a contact to a building source and I got an error in CircleCI that it was an additional keyword and not allowed. I removed it and the tests passed. Barring me fat-fingering something with the JSON... is it correct that building sources shouldn't have a contact? If so, just curious what makes them different in that regard from addresses and parcels. Will keep this in mind going forward 😄

Looks like an oversight in our jsonschema. The address file has contact but the building does not.

Awesome, thanks for taking a look @iandees! I made a PR in case it's an easy change. Not sure if there are bigger side-effects that need to be thought through.


Bot looks for DB_FILE in .env

I have an error Key DB_FILE not found in .\piwo-bot-main\.env

I assume it should be like DB_FILE = Google_Sheets

Fixed in commit 7ea51e1.

I assume it should be like DB_FILE = 'Main_DB.sql', but what is team.sql for?

DB_FILE is the .sqlite database file, set it like so: DB_FILE = "db_name.sqlite"
team.sql contains the SQLite schema that will be used to build the database tables if they do not already exist.


 Creating a crash dump
2021-06-19 [02:24:29] [Server thread/EMERGENCY]: Please upload the "/home/container/crashdumps/Sat_Jun_19-02.24.29-UTC_2021.log" file to the Crash Archive and submit the link to the Bug Reporting page. Give as much info as you can.
[Console Error:]
readjustment instructions
[I've done...]
[1. ...]
[2. ...]
[3. ...]
fix suggestions [optional]
[Your suggestion]

Please download BetterBan from Poggit.


Google Calendar integration

@MarkBrosche, did you mean for this PR to stay up for now given that we are changing it a bunch?


Building takes an insanely long time

Even though I upgraded to a T4 Medium I still can't get any improvement on the building time of my space.
from transformers import AutoTokenizer, AutoModelForCausalLM
import gradio as gr
from pathlib import Path

access_token = "hf_****"
DATA_PATH = Path("./")
MODEL_NAME = "meta-llama/Llama-2-7b-chat-hf"

# Define the cache directory for Hugging Face models
CACHE_DIR = DATA_PATH / "huggingface_cache"

# Ensure the cache directory exists
CACHE_DIR.mkdir(parents=True, exist_ok=True)

def get_storage():
    files = [
        {
            "orig_name": file.name,
            "name": file.resolve(),
            "size": file.stat().st_size,
            "data": None,
            "is_file": True,
        }
        for file in DATA_PATH.glob("**/*")
        if file.is_file()
    ]
    usage = sum([f['size'] for f in files])
    return files, f"{usage / (1024.0 ** 3):.3f}GB"

# Check if the model is available in the cache directory
try:
    tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME, token=access_token, cache_dir=CACHE_DIR)
    model = AutoModelForCausalLM.from_pretrained(MODEL_NAME, token=access_token, cache_dir=CACHE_DIR)
except Exception as e:
    print(f"An error occurred while loading the model: {str(e)}")
    tokenizer = None
    model = None

def text_generation(input_text):
    if tokenizer is None or model is None:
        return "Error: Model not loaded"

    input_ids = tokenizer(input_text, return_tensors="pt").input_ids
    outputs = model.generate(input_ids, num_beams=4, do_sample=True)
    generated_text = tokenizer.batch_decode(outputs, skip_special_tokens=True)[0]
    return generated_text

# Vue Property Decorator -> Options API
def propertyDecoratorRemoval(input_code):
    prompt = f"Perform a seamless migration from 'vue-property-decorator' code to the native Vue options API for the provided code snippet. Ensure that the refactoring maintains the functionality of the original code while leveraging the benefits of the Vue options API. Following is the code: {input_code}"
    agent_answer = text_generation(prompt)
    return agent_answer

propertyDecoratorRemovalTab = gr.Interface(
    fn=propertyDecoratorRemoval,
    article="This tab will take the inputted code (which utilizes the vue-property-decorator package) and migrates it to the native Options API in Vue.",
    inputs=gr.Textbox(lines=30, placeholder="vue-property-decorator code here..."),
    outputs=gr.Textbox(lines=30, placeholder="Options API code will be outputted here...")
)

# Vue Property Decorator -> Options API
def vueVersionMigration(input_code):
    return "Migration"

vueVersionMigrationTab = gr.Interface(
    fn=vueVersionMigration,
    description="❗ Please ensure that your code does not have any breaking changes when migrated to Vue 3.",
    article="This tab takes the inputted Vue 2 code and migrates it to Vue 3.",
    inputs=gr.Textbox(lines=30, placeholder="To migrate Vue 2 here..."),
    outputs=gr.Textbox(lines=30, placeholder="Migrated Vue 3 code will be outputted here...")
)

gr.TabbedInterface([propertyDecoratorRemovalTab, vueVersionMigrationTab], ["Vue Property Decorator removal", "Vue Version Migration"]).launch(allowed_paths=[str(DATA_PATH)])

Okay, after a very long time of building, it finishes; But I still get Connection Errored
I wrote an issue for this on the hugging face forum yesterday, but to no avail.

@eben-vranken We have manually revoked your access token. This means that scripts using it will not work anymore. You can of course regenerate tokens for your need. The reason why we revoked it is that it gives access to everything on your account, including starting Spaces or Inference Endpoints that would cost you money. In the future, please be careful about what you share publicly :wink:

@eben-vranken We have manually revoked your access token. This means that scripts using it will not work anymore. You can of course regenerate tokens for your need. The reason why we revoked it is that it gives access to everything on your account, including starting Spaces or Inference Endpoints that would cost you money. In the future, please be careful about what you share publicly 😉

I'm terribly sorry for forgetting to keep them in a .env

I'm terribly sorry for forgetting to keep them in a .env

No worries! The best way to handle your token is to login by running huggingface-cli login on your machine. In a Space, it's best to use an environment variable.  Otherwise it's also fine to have them in your code but have to be extra careful not to share it with others :)
About your initial issue, any way we can help? (https://github.com/huggingface/huggingface_hub/issues/1632#issuecomment-1705457253)

I'm terribly sorry for forgetting to keep them in a .env

No worries! The best way to handle your token is to login by running huggingface-cli login on your machine. In a Space, it's best to use an environment variable.  Otherwise it's also fine to have them in your code but have to be extra careful not to share it with others :)
About your initial issue, any way we can help? (https://github.com/huggingface/huggingface_hub/issues/1632#issuecomment-1705457253)

I was working on a work laptop and was not able to use huggingface-cli correctly due to how the permissions were set-up :/

In the end, is this issue solved or not? If not, what is the issue exactly? If it's resolved, we can close this issue :)

I moved away from huggingface. Since I did not have the time frame to develop a space there. Interesting platform though.


End Game Tracking Request

Ensemble is missing from end game tracking.  Please consider adding.
Thank you
Zandar

Thanks for the feedback. The app tracks both stage points (park/onstage/harmony/trap) and number of robots onstage so determining the Ensemble scoring is just adding these values together. The scouter doesn't need to track this themselves.
If you would like to make your own changes to the scouting forms, you can fork the repository and edit the configuration files (there are resources in the docs directory with specific details on this). We know that different teams may have different requirements of what they want to scout, so this app was designed to be easily editable to fit your needs.


Test distro and mock dnf json cleanup

The dnfjson_mock package isn't used by the images project and was left over from osbuild-composer.  The "test-distro-2" test distribution that was calling it was never used in the images tests.  The mock-dnf-json cmd is also duplicated in osbuild-composer and is used there by API tests.
The PR also includes a very small functional change: It adds the package name and digest to the error message when the digest/checksum fails to validate.
CI changes: I updated the version of golangci-lint that we use in the GitHub actions and disabled gosec G101 (hardcoded credentials) because it produces too many (and exclusively) false positives.  The updated linter revealed a lot of instances of G601 (implicit memory aliasing in for loop) when I ran it locally and I fixed all of them.

Should we keep this PR open until https://github.com/osbuild/osbuild-composer/pull/3683 gets worked out in case we need to bring some changes here?

This just needs one commit from this draft (I can never seem to make adding a commit to an existing PR work) - https://github.com/osbuild/images/pull/160/commits/5325bf58b559dee1f2978e3ef6a3eb0b7ae677b3 to switch newTestDistro to a public function.
I've updated my PR https://github.com/osbuild/osbuild-composer/pull/3683 to use this, and to fix the cloudapi test failures I was seeing. That PR will of course fail until a new images is vendored, I can do that once this PR is merged.

This just needs one commit from this draft (I can never seem to make adding a commit to an existing PR work) - 5325bf5 to switch newTestDistro to a public function.

Cherry picked and pushed.  Thanks!

The GitLab CI test generator failed.  Adding back on the queue.


Lib init polish

Closes several items in the library feedback related to init.

The permissions of the files created with library init are wrong. cpp and h shouldn't be executable
My email was escaped in library.properties: author=Julien Vanier<EMAIL_ADDRESS>Library with dash in name creates invalid class names
When creating a new library I'm not prompted a GitHub repository so I don't know I should add one
When creating a new library, the main file should be an INO file.
When create a new library, I'm not prompted to add a description

For the repo, description and license, only placeholders are added to library.properties

Coverage increased (+0.003%) to 99.855% when pulling 4de0109595645db569cd0ddca9a3159919559b73 on feature/lib-init-polish into a0568522846211a4d17a80f0f1b06eeef9ac06b8 on develop.

Coverage increased (+0.002%) to 99.854% when pulling 3dc3f8bc14c5278010729b889db957d783aa7f84 on feature/lib-init-polish into a0568522846211a4d17a80f0f1b06eeef9ac06b8 on develop.


⚠ Bofrost.de has degraded performance

In 944aac8, Bofrost.de (https://www.bofrost.de) experienced degraded performance:

HTTP code: 200
Response time: 1216 ms

Resolved: Bofrost.de performance has improved in 546c9cd.


Typo hunting

Thanks!

I was like "someone really wrote some typos in his PR to improve type hinting" .
Thanks a lot! 👍


Request for Access to EXICodec Java Source Code

I'm reaching out to request access to the Java source code used to generate the EXICodec.jar file that is being used in the EXI conversion process of V2G.  I am currently encountering challenges during the decoding of EXI and believe having access to the source code would greatly assist us in debugging.
Could you provide us with access to the Java source code or direct us to the appropriate repository!!

I'm working on adding ACDP support to 15118-20.
In Josev EVCC, when encoding ACDP_VehiclePositioningReq, I get the following, which I think indicates that the Exificient .jar file hasn't been built with ACDP support:
INFO 2023-11-24 10:23:16,384 - iso15118.shared.exi_codec (255): Message to encode (ns=urn:iso:std:iso:15118:-20:ACDP): {"ACDP_VehiclePositioningReq": {"Header": {"SessionID": "45E3EE715D0ACE6A", "TimeStamp":<PHONE_NUMBER>}, "EVMobilityStatus": true, "EVPositioningSupport": false}}
ERROR 2023-11-24 10:23:16,398 - iso15118.shared.exi_codec (260): EXIEncodingError in urn:iso:std:iso:15118:-20:ACDP with {"ACDP_VehiclePositioningReq": {"Header": {"SessionID": "45E3EE715D0ACE6A", "TimeStamp":<PHONE_NUMBER>}, "EVMobilityStatus": true, "EVPositioningSupport": false}}: Unknown error: javax.xml.bind.UnmarshalException
with linked exception:
[java.lang.RuntimeException:
Exception Description: A descriptor with default root element ACDP_VehiclePositioningReq was not found in the project]
Any ideas on how to remedy this? Having access to the EXICodec.jar build source would probably let me fix this myself.
Best regards,
Roger


The runStart must never Panic

Instead we need to Recover() and log the error with a stackTrace.

Displaying the stack trace is useful but not sure if it's good to do it in prod


xt-rpi-u-boot-scr: Don't override domd dtb addr

Current implementation limits domd image size to 10M
With this change all boot script's addresses can be defined addresses properly, and as the result large images can be loaded.

Reviewed-by: Grygorii Strashko<EMAIL_ADDRESS>Cc: @lorc @oleksiimoisieiev


module.elb.module.elb_attachment.aws_elb_attachment.this destruction ignore aws lifecycle create_before_destroy

Using the latest
Terraform v0.11.13
+ provider.aws v2.7.0

I've setup using the latest ELB for haproxy with healthcheck
module "elb" {
  source  = "terraform-aws-modules/elb/aws"
  version = "1.4.1"
  instances           = ["${aws_instance.haproxy.*.id}"]
  health_check = [
    ...

And have my haproxy life_cycle to create_before_destroy
resource "aws_instance" "haproxy" {
  count = "1"
  ...
  lifecycle {
    create_before_destroy = true
    prevent_destroy = false
    ignore_changes = [
      "security_groups",
    ]
  }
}

However I've confirmed https://console.aws.amazon.com/ec2/v2/home?region=us-east-1#LoadBalancers: still removes my existing running haproxy from the ELB leading to unavailability while it still waits for the haproxy instance to complete setup.
$ terraform apply

module.elb.module.elb_attachment.aws_elb_attachment.this: Destroying... (ID: haproxy-elb-...)
aws_instance.haproxy: Creating...
...
module.elb.module.elb_attachment.aws_elb_attachment.this: Destruction complete after 0s
aws_instance.haproxy: Still creating... (10s elapsed)
...
aws_instance.haproxy: Creation complete after 4m51s (ID: i-...)
aws_instance.haproxy.deposed: Destroying... (ID: i-...)
module.elb.module.elb_attachment.aws_elb_attachment.this: Creating...
  elb:      "" => "haproxy-elb"
  instance: "" => "i-..."
module.elb.module.elb_attachment.aws_elb_attachment.this: Creation complete after 0s (ID: haproxy-elb-...)
aws_instance.haproxy (deposed #0): Still destroying... (ID: i-..., 10s elapsed)
aws_instance.haproxy (deposed #0): Still destroying... (ID: i-..., 20s elapsed)
aws_instance.haproxy (deposed #0): Still destroying... (ID: i-..., 30s elapsed)
aws_instance.haproxy.deposed: Destruction complete after 31s

Apply complete! Resources: 2 added, 0 changed, 2 destroyed.

If you experience such issues with ELB and instances being removed try to use aws_elb_attachment resource outside of this module to control when you want to add instances to an ELB.


announcement post

Before we rope in more members it would be good to

improve the website (see #3)
Get the first post, i.e announcement regarding the setting up of this group.

@ajnsit and @saurabhnanda let us work on this.
As comments to this issue, we can putin what each one of us is hoping to get out of such a group. I think we have a fairly good representation (1 from academia and 2 from industry) to get an idea of where we want this to go forward.

I will go first by putting in my motivation

Transfer of ideas from academia to industry and vice versa
Research funding  and collaboration
Source of internship etc for students.

My goals are -

Building a healthy Haskell and FP community in India.
Generating more FP jobs for Indians, with both local and foreign companies.

The problem is clearly that of bootstrapping. Companies would not give Haskell a serious consideration until they are able to easily hire skilled people. Building a community around Haskell would help generate that skill base.

thanks anupam, @saurabhnanda now it is your turn for confess your sins.

Companies would not give Haskell a serious consideration until they are able to easily hire skilled people. Building a community around Haskell would help generate that skill base.

As someone trying to migrate my company's codebase from Ruby to something better (Haskell / Scala / OCaml), I would be happy if there is a clear path to make a mid-level developer productive in these languages within a reasonable time-frame, say 4-6 weeks. Which means, that some sort of assisted learning programme or well-written tutorials would be acceptable as well.
What I'm hoping to get out of such a group:

A place to share knowledge & techniques relevant to our industry context (i.e. outside of compilers, parsers, etc).
Get people for short-term internships
Get people for long-term work opportunities
Fund small projects to fix common problems in the eco-system (a missing library, a missing binding, etc.)
Regular meetups

Great. now we need to summarise this in the first announcements. I have cooked up some placeholder announcement.  @ajnsit and @saurabhnanda can you have a go at it. Meanwhile I just sent a invite to @psibi who I understand is based in chennai. We might want one person from banglore as well that way we will be well represented.

I will move to Bangalore soon. :)

We can't have an effective announcement without defining the 'who' we are announcing to, and for what purpose. Is the aim to get more members? Or to solicit suggestions? Or something else? We may be jumping the gun here a little bit.

I suggest we start by making it our goal to collect some relevant basic data points about the current usage of Haskell/FP in the academia and industry in India. How about creating a survey which people can respond to. I personally would like to ask - 1. "Does anyone within your company use, or has used, or has contemplated using, Haskell / FP?" 2. "Please provide any details which can be shared".

@ajnsit I agree to all the points that you are making.
The role of the website as I see it.

Announcing interesting events related to FP in India. This could be
conferences, meetups, hackathons etc that various groups like the
one @ajnsit organises (Delhi-NCR).

A place to advertise for job openings/internships in India,

Any other interesting item. Say the formation of a reading group in
some city, experience reports on building a startup.

(Any one can send us updates via pull requests to the website source)
Unfortunately, the current situation is that we do not even know each
other. We do not know how large is our community, who is doing what
etc. The survey is also a good idea. But whom will we send the survey
to.
My idea of bringing in you guys is that you can spread the word among
your contacts informally first and build the "infrastructure,
i.e. website, mailing list, irc channel. I was hoping that we will
have few people from the different cities and each of us will take
care of spreading the word around in their city.
I think we can already make a formal announcement on the "broad
statement of purpose" of the group and post the link on
reddit/hackernews etc.  The broad agenda is of course to increase the
influence of FP in India but we can be more specific based on the
inputs in this ticket. Such a website, I guess, can be used to point
the surveyee to give him/her an idea of what to expect from the
results of the survey.

Are we sure a similar group be some other name doesn't already exist? I was
surprised to find the number of Haskell conferences when I started
specifically searching for them. Their SEO is pretty bad and they don't
seem to bother with discoverability.
On 5 Sep 2016 1:01 pm, "Piyush P Kurur"<EMAIL_ADDRESS>wrote:

@ajnsit https://github.com/ajnsit I agree to all the points that you
are making.
The role of the website as I see it.

Announcing interesting events related to FP in India. This could be
conferences, meetups, hackathons etc that various groups like the
one @ajnsit https://github.com/ajnsit organises (Delhi-NCR).
2.
A place to advertise for job openings/internships in India,
3.
Any other interesting item. Say the formation of a reading group in
some city, experience reports on building a startup.
(Any one can send us updates via pull requests to the website source)
Unfortunately, the current situation is that we do not even know each
other. We do not know how large is our community, who is doing what
etc. The survey is also a good idea. But whom will we send the survey
to.
My idea of bringing in you guys is that you can spread the word among
your contacts informally first and build the "infrastructure,
i.e. website, mailing list, irc channel. I was hoping that we will
have few people from the different cities and each of us will take
care of spreading the word around in their city.
I think we can already make a formal announcement on the "broad
statement of purpose" of the group and post the link on
reddit/hackernews etc. The broad agenda is of course to increase the
influence of FP in India but we can be more specific based on the
inputs in this ticket. Such a website, I guess, can be used to point
the surveyee to give him/her an idea of what to expect from the
results of the survey.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/indian-curry/indian-curry.github.io/issues/4#issuecomment-244677095,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AABu0fFbI1uRugVr2b7VI_qoqPINUrf6ks5qm8VegaJpZM4JwKi2
.

On Mon, Sep 05, 2016 at 01:41:29AM -0700, Saurabh Nanda wrote:

Are we sure a similar group be some other name doesn't already exist? I was
surprised to find the number of Haskell conferences when I started
specifically searching for them. Their SEO is pretty bad and they don't
seem to bother with discoverability.

At least I have not seen any other than informal groups here and
there. The whole point is to have a central location where such
announcements can be made. I think that is very important to get
things started. Since I think there are not too many, we can get away
with a simple pull request model to update the site.

@saurabhnanda That is interesting. Can we compile a list of all haskell conferences / meetups in India? I would be glad to help out with curating such a list, and it would be nice to have more visibility for the Delhi NCR meetup.

@ali-abrar. May be it is your turn to confess what you would like to see from such a group. Others please welcome @ali-abrar. We met at the Haskell 2016 and had a great time there.

Others please welcome @ali-abrar. We met at the Haskell 2016 and had a great time there.

The.. horse race thing? Or given the timing I'll assume you mean ICFP :) Well Ali, welcome! And could you please sponsor tickets to the ICFP next time for your employees :)

He he so you too noticed the horse race thing.  Well it was indeed Haskell Symposium co-located with ICFP. I came back on Sunday.

Nice to meet new peoples here! Welcome Ali! Do you reside in India or elsewhere ?

Please update the announcement post. We should be thinking of making a public announcement soon.

Hi everyone. Sorry for the delayed reply - upon returning from Japan I found myself confronted with a mountain of work. So it goes.
@piyush-kurur Thanks for the invite. @psibi I'm located in New York City. I co-founded a software firm specializing in Haskell development here with my friend, Ryan Trinkle (primary author of reflex-frp).
My apologies for being less familiar with the facts on the ground than you all surely are. From this distant vantage, it feels more difficult to find and recruit Haskell/FP developers from the subcontinent than, say, Europe. In part, this may be due to availability, but I suspect other barriers are at play here as well. I agree with @ajnsit that this site could do a great deal to increase the visibility to overseas employers of FP talent in India.
That said, I don't think the site should focus primarily on the job board. In New York, we've had great success recruiting from the NY Haskell Users Group - an organization that is primarily dedicated to knowledge-sharing and community-building. Such a community attracts the kind of people we're interested in hiring much more reliably than communities focused primarily on recruiting and employment. A similar principle might apply here: by focusing on knowledge- and resource-sharing, and the publicization (and eventual interconnection) of disparate events and groups, we can create a hub that attracts existing FP talent and accelerates the growth of the FP community. Once that hub is created, prospective employers will have a much easier time connecting with skilled members of the community.
It sounds like there's some interest in listing the various FP communities/groups that have grown up organically already. I think this is a great idea. One great way to add value here would be to consolidate the lectures/talks/media that these groups have produced (or start to produce) and to post about them. This can be as simple as a feed/blog an a youtube playlist. The important thing is to make the content discoverable and to try to represent the pulse of the FP community.
I'm sure you all have thought of most of this already. These are just my initial thoughts as I catch up on the conversations here and start looking through the code. Nice to meet you all!

@ali-abrar I do not think this site is meant for a job post site
only. I would say it should primarily be for organising talks,
meetups, hackathons, and may be mentorship for projects etc (I am more
thinking of it from an academic point of view). @ajnsit for example
organises a meetup in the NCR region not many of us know about it
which is a pity. This should change. If possible we should even have a
once in a year all india meet. But first we should have a critical mass.
This is the reason why I am insisting that the announcement post
should be well thought of. Once we have a seed membership, things can
grow organically.

By the way @saurabhnanda has created a mailing list<EMAIL_ADDRESS>(note no hyphen in the name See #5) . Please join this. We can carry out this discussion on the list.

For anybody searching the web url for the group, it is this: https://groups.google.com/forum/#!forum/indiancurry

I think we are ready to make a public announcement. Please go through the announcement post and clean it up.

@piyush-kurur Sorry, but where is the announcement post

@psibi it is in the directory news/post/


Readme update

closes #204

Really nice!
Minor comments:

The Hasura storage link points to HBP. On one hand, HBP does not have the same API, but on the other hand, Hasura Storage documentation is void. We will probably need to improve the documentation very soon
in "How to Contribute", we have "Check our contribution guide for more details about how to contribute. We're looking forward to your contribution!" and "For more information, read our Contribution Guide". It looks like we're saying it twice. More concise is better I think


Logo contest

This implements the logo contest collection interfaces.  Got to:
http://localhost:3000/contest_entries/new
to create new logo contest entries.  You must be in admin mode.
Go to:
http://localhost:3000/contest_entries
to see all the current entries (again you must be an admin)
Go to:
http://localhost:3000/contest_ballots
To see the current user's ballot.  Should be available to any registered user.

Coverage increased (+0.03%) to 92.977% when pulling f78c2a402594e06d473ff538432d8b50d000fef5 on logo-contest into e8255deccb947e421d0567eeec50b20d8bc99233 on master.

As you suggest I would like to added the edit, update and destroy, but figured it wasn't high priority.  That's why I didn't take it out of the routes.  Given that we're presumably going to get rid of this stuff once the contest is over, I figured it wasn't critical to resolve this issue.


Update scripts path

Description
Removed path prefixes such as/home/westbam/.
Where should the reviewer start?
Check out the branch and run with cardano-cli and cardano-node fully synced.
Motivation and context
Originally the script contained author's specific path location, such /home/westbam/.cargo/bin/cncli, so the script doesn't work. Since the programs cncli and cardano-cli would've been available in the $PATH environment, I removed the prefix altogether. Assumes $CNODE_HOME env is set.
Which issue it fixes?
Link to issue: Closes #21
How has this been tested?
Locally verify that these scripts run:
./cncli-leaderlog-current.sh ./cncli-leaderlog-next.sh
Using the version
cardano-cli 1.35.3 - linux-x86_64 - ghc-8.10
git rev 950c4e222086fed5ca53564e642434ce9307b0b9

This doesn't make sense to use cardano-cli to query the leadership schedule. This tool is cncli and does its own calculations.


ci: heavy linux workload on ubuntu-latest-4-cores

Looking at the large runner here, looks like we need to use the right name
#skip-changelog

A problem I see already is that it'll run the build in series. Since we have 1 agent, and 3 parallel builds for it.

A problem I see already is that it'll run the build in series. Since we have 1 agent, and 3 parallel builds for it.

Status: Downloaded newer image for ghcr.io/epicgames/unreal-engine:dev-slim-5.4.1
29d835b3ddc370bc69d060b9993670e0e890fc1a2313a49416fe5c09f66844c8
+ docker logout ghcr.io
Removing login credentials for ghcr.io
+ docker exec --user root unreal useradd -u 1000 -g 1000 --create-home gh
useradd: UID 1000 is not unique
Error: Process completed with exit code 4.

@tustanivsky any idea what's up?

After investigating this for a while I've figured out that there are some differences between the standard and large GitHub runners in terms of user configuration. On both of them we run agent on behalf of runner user however it has different UIDs:

1001 on standard runner:

$ cat /etc/passwd
...
runneradmin:x:1000:1000:Ubuntu:/home/runneradmin:/bin/bash
runner:x:1001:122:,,,:/home/runner:/bin/bash

1000 on large runner:

$ cat /etc/passwd
...
runner:x:1000:1000:Ubuntu:/home/runner:/bin/bash

At the same time UE docker container provided by Epic Games already has a ue4 user with UID 1000 which causes the above error when we're running the following command:
https://github.com/getsentry/sentry-unreal/blob/311b0058321ff048ed2b13039d24586b5400bb5e/.github/workflows/ci.yml#L183
This step is required to install UE4 CLI that we're using later on to build the plugin and run tests. Since it's just a convenience utility for us I'll see if we can get rid of it and use the Unreal's build tools directly to avoid dealing with that matching UIDs issue.

@bruno-garcia Are there any additional changes required within the scope of this PR beyond the introduction of the ubuntu-latest-4-cores runner to our CI pipeline?


HOF backup file problem

Hello,
It’s me, again. I have an issue to report. I’m using Win 10 and 11 (the issue is the same on both). If you start crawling the server, it goes ok, but if you want to save the crawled data and and restore it, only 346967 players will restore and you’re stuck. Can’t crawl again with the restored HOF. I already tried few things: Start crawling until about 450000 players are fetched, pause, wait till it stops, wait few seconds, backup HOF, wait few seconds, close and open program, login, wait, restore and only 346967 players will be restored. I tried to backup it in multiple different stages of fetched players (till about 800000). What I discovered was that under the 346967 players fetched everything was functionally ok, only above that number it was stuck. I always tried new session with fresh program (unzipped to different folder). Oh and the HOF file is always about 400 MB (never the same, but about 400 MB). Is there some option to send you a log file? If there is some hidden?
I hope you understand it. Maybe I missed something so feel free to ask me.

Hey, thanks for the detailed report. I have no clue why it would break after that specific amount. There is some jank with backing up whilst crawling is active and a discrepancy for players with no equipment, but that does not seem to be what is happening here.
My best theory is this: Some players and HoF pages are outright broken, they will also break the official client. To deal with them, my tool just skips these players and pretends that they were successfully fetched, otherwise the tool would get stuck reattempting to fetch these invalid players forever. The amount of broken players/pages is maximum like 1 or 2 per server, so this should not matter. If I had to guess, after some point the crawling itself breaks in your case for all characters, not just invalid players for unknown reasons, but you have no indication of that, because the numbers keep increasing. When you backup & restore, the number displayed becomes the actual amount of fetched players, which is far lower, because it does not contain the players, that failed to load. This should not influence the continuation of the crawling, but it is my best guess.
Overall though, I think I have to basically rewrite this tool from scratch anyways. This was just meant as a tech demo for the underlying API, that I threw together in an afternoon. I did not expect anyone to actually use this. Currently the UI sucks and as you can tell, there are some bugs and the lack of logging is pretty bad in cases like this. I am pretty busy at the moment, but in the coming week I should be able to just remake this tool and handle a bunch of this stuff more professionally. Chances are, I might also just add the HoF sharing stuff, as I have some ideas on how to handle that without dealing with the privacy problems of that.
For the time being, can you tell me which server you are playing on, so I can reproduce the behaviour?

Hi,
thanks for the detailed answer. Now I understand little bit more of the “BTS” functions of your program. I’m not really code savvy so I can’t understand most of your code. Your explanation is closer to me.
Now I remembered something. You wrote about the bugged HOF pages. Sometimes it happens to me that if you want to browse the HOF on standard client (it doesn’t matter if it’s browser, Steam or mobile) you get few normally shown players and if you scroll for a little bit you get only - - - (or … , can’t remember now, but I don’t think it matters) instead of the standard player info. It will go forever, or at least for lots of pages (than I lose my patience :D). Can’t click on those. You need to reopen the HOF or sometimes relog to fix it. Could it be somewhat related? I think it’s the same behaviour as you described but more pronounced.
About the server… I was trying to not tell it (because Playa, you now how it is…), but… I will just tell you it’s the LAST fusion of CZECH servers. You will know which one I mean.
I’m looking forward for the redesigned version. But still… I was looking for some alternative to the og CrawlerNG. Yes, there are some alternatives even here on GitHub, but even though your is maybe the newest it is the richest in therms of features. You have my compliments for this masterpiece.

Now I remembered something. You wrote about the bugged HOF pages. Sometimes it happens to me that if you want to browse the HOF on standard client (it doesn’t matter if it’s browser, Steam or mobile) you get few normally shown players and if you scroll for a little bit you get only - - - (or … , can’t remember now, but I don’t think it matters) instead of the standard player info. It will go forever, or at least for lots of pages (than I lose my patience :D). Can’t click on those. You need to reopen the HOF or sometimes relog to fix it. Could it be somewhat related? I think it’s the same behaviour as you described but more pronounced.

Jup, it is exactly that. If you want some more technical information, the server actually sends back a hall of fame response, that ends in the middle of a player name and the official client just doesn't know how to handle that. I assume that is because someone registed a player with an invalid name and the server just gives up printing the name when it encounters the broken part of the name.

I was looking for some alternative to the og CrawlerNG

I tried to use that a few years ago, but I could not figure out what it was supposed to do. I assumed that it would do what this tool here does, but it just looked like a HoF viewer, when I tried it. If you have used it and know of any featues, that you would like to see from that, feel free to open another issue.

You have my compliments for this masterpiece.

Thanks 😄

Oh, nice :D But I’m not sure about the invalid username as you wrote, because it happens to me even on some higher levels of players. Let’s say 400+. And as I said, reopening HOF or relog fixes it. Or did I miss something?
I was trying too, but never used it, because it was programmed for the old backend of S&F and never updated to the new one. That is what I found so maybe there was more to it, but who know. Only watched some videos how it worked. But in the end it did some parts of what this tool does only with different GUI. What I remember it was, as you said, only a crawler. Than you needed to fight the opponents manually or with help of MFBot to do it for you.
I’ll look more to it and try to find some new features, but I think that all features needed are already present in this tool.

I’m not sure about the invalid username as you wrote, because it happens to me even on some higher levels of players. Let’s say 400+

Interesting. I am pretty sure the broken username stuff is correct, because I could reliably reproduce it on specific HoF ranks. If it also happens on lvl 400+ accounts, that means there is more than one reason for this to happen. That is a bad sign in terms of being able to trust the server output and might mean, that a character session can become broken in some way just by looking at normal HoF pages... well... I guess I will have to do the logout/login stuff as well then to make sure. Thanks for the follow up

The new version is a total rewrite of the old code, which fixed a bunch of bugs. I am guessing, that your bug was fixed during that, but if it still happens to you, feel free to reopen this issue


openshift: tracker for etcd timeout issues

@kargakis @pweil-

https://circleci.com/gh/Azure/acs-engine/25995
TASK [openshift_hosted : Create OpenShift router] ******************************
failed: [localhost] (item={u'name': u'router', u'certificate': {u'certfile': u'/etc/origin//master/openshift-router.crt', u'keyfile': u'/etc/origin//master/openshift-router.key', u'cafile': u'/etc/origin//master/ca.crt'}, u'replicas': u'1', u'serviceaccount': u'router', u'namespace': u'default', u'stats_port': 1936, u'edits': [{u'action': u'put', u'key': u'spec.strategy.rollingParams.intervalSeconds', u'value': 1}, {u'action': u'put', u'key': u'spec.strategy.rollingParams.updatePeriodSeconds', u'value': 1}, {u'action': u'put', u'key': u'spec.strategy.activeDeadlineSeconds', u'value': 21600}], u'images': u'registry.access.redhat.com/openshift3/ose-${component}:${version}', u'selector': u'region=infra', u'ports': [u'80:80', u'443:443']}) => {\"changed\": false, \"item\": {\"certificate\": {\"cafile\": \"/etc/origin//master/ca.crt\", \"certfile\": \"/etc/origin//master/openshift-router.crt\", \"keyfile\": \"/etc/origin//master/openshift-router.key\"}, \"edits\": [{\"action\": \"put\", \"key\": \"spec.strategy.rollingParams.intervalSeconds\", \"value\": 1}, {\"action\": \"put\", \"key\": \"spec.strategy.rollingParams.updatePeriodSeconds\", \"value\": 1}, {\"action\": \"put\", \"key\": \"spec.strategy.activeDeadlineSeconds\", \"value\": 21600}], \"images\": \"registry.access.redhat.com/openshift3/ose-${component}:${version}\", \"name\": \"router\", \"namespace\": \"default\", \"ports\": [\"80:80\", \"443:443\"], \"replicas\": \"1\", \"selector\": \"region=infra\", \"serviceaccount\": \"router\", \"stats_port\": 1936}, \"msg\": {\"results\": [{\"cmd\": \"/usr/bin/oc create -f /tmp/Secrets835J8 -n default\", \"results\": {}, \"returncode\": 0}, {\"cmd\": \"/usr/bin/oc create -f /tmp/ClusterRoleBindingMGVKFR -n default\", \"results\": {}, \"returncode\": 1, \"stderr\": \"Error from server: error when creating \\\"/tmp/ClusterRoleBindingMGVKFR\\\": etcdserver: request timed out\
\", \"stdout\": \"\"}, {\"cmd\": \"/usr/bin/oc create -f /tmp/ServicebKdroV -n default\", \"results\": {}, \"returncode\": 0}, {\"cmd\": \"/usr/bin/oc create -f /tmp/DeploymentConfigWnCCff -n default\", \"results\": {}, \"returncode\": 0}], \"returncode\": 1}}

https://circleci.com/gh/Azure/acs-engine/26340

@pweil- @kargakis I suspect we're going to have to do something about this.  Do you think doing increasing ETCD_ELECTION_TIMEOUT (currently 2.5s) might work as a stopgap?

@jim-minter I'm not sure how ETCD_ELECTION_TIMEOUT would help in this situation.  Isn't it for leader election issues (coupled with heartbeat interval)?
It seems like we need to wait for a better ready state or have retry mechanisms in place.  Since this looks like it's in Ansible I'm thinking ready state in the extensions is maybe a better route.
Maybe we can poach os::cmd::internal::run_until_exit_code?

See https://github.com/coreos/etcd/blob/master/Documentation/faq.md#why-does-etcd-lose-its-leader-from-disk-latency-spikes and https://coreos.com/etcd/docs/latest/tuning.html
I'm going to experiment with ETCD_ELECTION_TIMEOUT and see if that helps us as a starting point.

You suspect disk latency?  Let's see what happens when you set it, but it seems we're going to want to try and figure out the actual cause.

https://github.com/openshift/origin/issues/16248 is relevant but sadly not conclusive.
https://github.com/Azure/acs-engine/pull/2996 will record etcd logs for follow-up.

/kind flake

Hrm, we should probably switch to use SSD anyway
https://github.com/coreos/etcd/blob/master/Documentation/op-guide/hardware.md#disks


igv.org/app CORS prevents loading reference data from broadinstitute.org/AWS

This isn't necessarily the fault of the web app itself, rather the security settings of igv.org, but it prevents loading any of the example data at igv.org/app/:

There's something strange going on there because the CORS headers are
definitely set in those buckets.   How did you get this error,  I'm not
able to reproduce it.
On Mon, Apr 1, 2019 at 8:36 AM Timothy DeFreitas<EMAIL_ADDRESS>wrote:

This isn't necessarily the fault of the web app itself, rather the
security settings of igv.org, but it prevents loading any of the example
data at igv.org/app/:
[image: Screen Shot 2019-04-01 at 11 35 22 AM]
https://user-images.githubusercontent.com/3845738/55340267-532d6680-5472-11e9-9aa6-358f95250fe4.png
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/igvteam/igv-webapp/issues/90, or mute the thread
https://github.com/notifications/unsubscribe-auth/AA49HAjJ20QsWr3JmbOgEVR3tZgNEw8cks5vcieOgaJpZM4cWCDb
.

Hmmm, somethings strange on my end. I get the error just by going to the site in one of my chrome windows, but if I launch an incognito window (or Firefox), it comes up just fine. Could be one of my browser extensions, or I just need to relaunch chrome. If I can figure out what it was, I'll update this issue.


[RFE] Support Object Annotations

Currently, a template level annotation is available at the top of a FAST template:
{{!
  A simple HTTP application with HTTP load balancing. Provide a virtual address
  and port to host on, and a list of HTTP server IP addresses and a port to
  load balance requests to.
}}

Annotations at the object level should be supported. AS3 supports a remark property of format: f5remark (for all traffic objects, correct?). Perhaps this property could be used to provide the FAST annotation.

FAST templates support a YAML superset of JSON Schema for specifying templates and variable types beyond the simple description as above.
The following simple template:
{{! this is a template }}
{
  declaration: {{a_variable}}
}

Is equivalent to this advanced template:
description: this is a template
template: |
 {
  declaration: {{a_variable}}
 }

Another advanced template example:
title: A useless template to specify a constrained JSON object
description: A template that constructs a JSON object with a single port property
definitions:
  validPort:
    title: Port
    description: A valid port in the range of 0 to 65535
    type: integer
    minimum: 0
    maximum: 65535
template: |
  {
    port: {{myPort::validPort}}
  }

Some of these titles and descriptions are used in the UI today if provided, and some will be added in the future.
This leaves the AS3 fields open for AS3 specific annotations. Remarks, comments, labels and other AS3 metadata can be included as part of the template text, entered by the user (if parameterized by the template author), or constructed from template parameters.
We are working on delivering documentation,  but we have a (bare) advanced templating example using partials (they work like includes). It references the JSON-schema in the same directory, f5.json.
https://github.com/f5devcentral/f5-appsvcs-templates/blob/master/templates/bigip-fast-templates/http.yml
I will leave this ticket open until these advanced features are better documented.


#656: Fix crashes that caused when using object-rest properties in namespace rule

Fixes #656.
This is the one of long standing issue, where ESLint crashes when you are trying to use object-rest on namespace import:
import * as names from './named-exports';
const {a, b, ...rest} = names; // Cannot read property 'type' of undefined

Also, I have noticed that it's only caused on variable declarations (in the other words, it does not crash on assignment expressions):
import * as names from './named-exports';
let a, b, rest;
({a, b, ...rest} = names); // Nothing happens

I don't know if this is a right solution, but I think it's going to be okay ever since I found that it does not crash when it's not using variable declarations.
I will add notes to changelog and documents once this has confirmed.

Coverage increased (+0.004%) to 96.234% when pulling 1a084cc975c0f0a3da60822197e47c718402d694 on preco21:namespace-crash-fix into 196c238d664c0002bce0fc630ae66130cc6c19cc on benmosher:master.


RUN-20790 Impersonate dummy dcgm exporter on fake nodes

Samples
[status-updater] Populate impersonation configuration to the exporter
Enrich with prometheus labels
Refactor metrics initialization and update tolerations in status exporter

Closing this PR as the current need and motivation do not justify the associated risks and added code complexity.


Create domain association failed One or more domains requested are already associated with another Amplify app: etaop.in

Before opening, please confirm:

[X] I have checked the custom domains troubleshooting guide.
[X] I have read the guide for submitting bug reports.
[X] I have done my best to include a minimal, self-contained set of instructions for consistently reproducing the issue.

App Id
duwsx28ik9714
Region
ap-south-1
Step
Domain Add
Status
Create domain association failed One or more domains requested are already associated with another Amplify app: etaop.in
Issue or question
Create domain association failed One or more domains requested are already associated with another Amplify app: etaop.in
What I am doing wrong?
Error message
Create domain association failed One or more domains requested are already associated with another Amplify app: etaop.in
Additional information
Create domain association failed One or more domains requested are already associated with another Amplify app: etaop.in

Hi @xabhi7549 👋🏽 it looks like the domain has been successfully associated with your Amplify application and is properly hosting your application. Do you need further assistance?

Hi @hloriana , I able to add www.etaop.in not etaop.in


Remove arrow function to accomplish with ES4

Fixes #139

I would really enjoy having this PR merged too (besides the use of arrow function is not vital)
:)

Same needs to, blocking on Windows 7 / IE 11.

Thanks to @carauzs who actually did the work - I just created the PR!

@thenikso Can you please merge and release this PR?

Please merge it

hello here! I've been slacking badly with this repo. @jwhitmarsh would you like to become a contributor?


Make ViewComponentTagHelper bound attributes have nicer tooltips

Today they have typeName __Generated__SomeViewComponentTagHelper.PropertyName we should make this nicer.

d9173118831f905544f8d3098d0c0fe0f5d1964b


[SMALLFIX]Remove unused import in AbstractUfsManager.java

Remove
import alluxio.thrift.UfsInfo;

alluxio-bot, check this please

alluxio-bot, check this please

alluxio-bot, check this please

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/Alluxio-Pull-Request-Builder/17823/
Test PASSed.

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/Alluxio-Pull-Request-Builder/17824/
Test PASSed.

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/Alluxio-Pull-Request-Builder/17825/
Test PASSed.