()
| 33 | |
| 34 | @pytest.mark.skip("skip because coremltools is not available in CI") |
| 35 | def test_coreml_runtime(): |
| 36 | import coremltools |
| 37 | from coremltools.models.neural_network import NeuralNetworkBuilder |
| 38 | |
| 39 | def create_coreml_model(): |
| 40 | shape = (2,) |
| 41 | alpha = 2 |
| 42 | |
| 43 | inputs = [ |
| 44 | ("input0", coremltools.models.datatypes.Array(*shape)), |
| 45 | ("input1", coremltools.models.datatypes.Array(*shape)), |
| 46 | ] |
| 47 | outputs = [ |
| 48 | ("output0", coremltools.models.datatypes.Array(*shape)), |
| 49 | ("output1", coremltools.models.datatypes.Array(*shape)), |
| 50 | ] |
| 51 | builder = NeuralNetworkBuilder(inputs, outputs) |
| 52 | builder.add_elementwise( |
| 53 | name="Add", input_names=["input0", "input1"], output_name="output0", mode="ADD" |
| 54 | ) |
| 55 | builder.add_elementwise( |
| 56 | name="Mul", alpha=alpha, input_names=["input0"], output_name="output1", mode="MULTIPLY" |
| 57 | ) |
| 58 | return coremltools.models.MLModel(builder.spec) |
| 59 | |
| 60 | def verify(coreml_model, model_path, dev): |
| 61 | coreml_model = create_coreml_model() |
| 62 | |
| 63 | out_spec = coreml_model.output_description._fd_spec |
| 64 | out_names = [spec.name for spec in out_spec] |
| 65 | |
| 66 | # inference via coremltools |
| 67 | inputs = {} |
| 68 | for in_spec in coreml_model.input_description._fd_spec: |
| 69 | name = in_spec.name |
| 70 | shape = in_spec.type.multiArrayType.shape |
| 71 | inputs[name] = np.random.random_sample(shape) |
| 72 | |
| 73 | coreml_outputs = [coreml_model.predict(inputs)[name] for name in out_names] |
| 74 | |
| 75 | # inference via tvm coreml runtime |
| 76 | runtime = coreml_runtime.create("main", model_path, dev) |
| 77 | for name in inputs: |
| 78 | runtime.set_input(name, tvm.runtime.tensor(inputs[name], dev)) |
| 79 | runtime.invoke() |
| 80 | tvm_outputs = [runtime.get_output(i).numpy() for i in range(runtime.get_num_outputs())] |
| 81 | |
| 82 | for c_out, t_out in zip(coreml_outputs, tvm_outputs): |
| 83 | np.testing.assert_almost_equal(c_out, t_out, 3) |
| 84 | |
| 85 | def check_remote(coreml_model): |
| 86 | temp = utils.tempdir() |
| 87 | compiled_model = xcode.compile_coreml(coreml_model, out_dir=temp.temp_dir) |
| 88 | xcode.popen_test_rpc( |
| 89 | proxy_host, proxy_port, key, destination=destination, libs=[compiled_model] |
| 90 | ) |
| 91 | compiled_model = os.path.basename(compiled_model) |
| 92 | remote = rpc.connect(proxy_host, proxy_port, key=key) |
no test coverage detected
searching dependent graphs…