Skip to content

Commit

Permalink
5.2 Release (#1401)
Browse files Browse the repository at this point in the history
* 5.2 Release

* Fix undefinded variables

* Update supported version number

* Additional 5.2 changes

* Modify .gitlab-ci.yml
  • Loading branch information
TobyRoseman authored Feb 22, 2022
1 parent fdd5630 commit e3032bf
Show file tree
Hide file tree
Showing 187 changed files with 3,854 additions and 2,335 deletions.
16 changes: 2 additions & 14 deletions .gitlab-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ check_python_flake8:
script:
- python -m pip install --upgrade pip
- pip install flake8
- flake8 ./coremltools --count --select=E9,F63,F7,F82 --show-source --statistics
- flake8 ./coremltools --count --select=E9,F5,F63,F7,F82 --show-source --statistics

########################################################################
#
Expand Down Expand Up @@ -198,18 +198,6 @@ test_macos11_py37_tf1:
TEST_PACKAGE: coremltools.converters.mil.frontend.tensorflow
WHEEL_PATH: build/dist/*cp37*10_15*

test_macos11_py37_tf2:
<<: *test_macos_pkg_with_reqs
tags:
- macos11
dependencies:
- build_wheel_macos_py37
variables:
PYTHON: "3.7"
REQUIREMENTS: reqs/test_tf2.pip
TEST_PACKAGE: coremltools.converters.mil.frontend.tensorflow2
WHEEL_PATH: build/dist/*cp37*10_15*

test_macos11_py37_mil:
<<: *test_macos_pkg
tags:
Expand All @@ -218,7 +206,7 @@ test_macos11_py37_mil:
- build_wheel_macos_py37
variables:
PYTHON: "3.7"
TEST_PACKAGE: coremltools.converters.mil
TEST_PACKAGE: coremltools.converters.mil.mil
WHEEL_PATH: build/dist/*cp37*10_15*

#########################################################################
Expand Down
6 changes: 3 additions & 3 deletions coremltools/_deps/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ def __get_sklearn_version(version):
_TF_1_MIN_VERSION = "1.12.0"
_TF_1_MAX_VERSION = "1.15.0"
_TF_2_MIN_VERSION = "2.1.0"
_TF_2_MAX_VERSION = "2.5.0"
_TF_2_MAX_VERSION = "2.6.2"

try:
import tensorflow
Expand Down Expand Up @@ -147,7 +147,7 @@ def __get_sklearn_version(version):
_HAS_KERAS_TF = True
_HAS_KERAS2_TF = True
_KERAS_MIN_VERSION = "1.2.2"
_KERAS_MAX_VERSION = "2.2.4"
_KERAS_MAX_VERSION = "2.6.0"
MSG_KERAS1_NOT_FOUND = "Keras 1 not found."
MSG_KERAS2_NOT_FOUND = "Keras 2 not found."

Expand Down Expand Up @@ -218,7 +218,7 @@ def __get_sklearn_version(version):

# ---------------------------------------------------------------------------------------
_HAS_TORCH = True
_TORCH_MAX_VERSION = "1.9.1"
_TORCH_MAX_VERSION = "1.10.2"
try:
import torch
_warn_if_above_max_supported_version("Torch", torch.__version__, _TORCH_MAX_VERSION)
Expand Down
48 changes: 35 additions & 13 deletions coremltools/converters/_converters_entry.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,29 @@
#
# Use of this source code is governed by a BSD-3-clause license that can be
# found in the LICENSE.txt file or at https://opensource.org/licenses/BSD-3-Clause
import gc

import collections
import gc
import os
import warnings

from coremltools import ComputeUnit as _ComputeUnit
from coremltools.converters.mil.mil.passes.quantization_passes import AbstractQuantizationPass, FP16ComputePrecision
from coremltools.converters.mil.mil.passes.quantization_passes import ComputePrecision as precision
from coremltools import (
ComputeUnit as _ComputeUnit,
__version__ as _ct_version
)
from coremltools.converters.mil.mil.passes.quantization_passes import (
AbstractQuantizationPass,
ComputePrecision as precision,
FP16ComputePrecision
)
from coremltools.converters.mil.input_types import InputType, ClassifierConfig
from coremltools.converters.mil.converter import mil_convert
from coremltools.converters.mil.mil import Program
from coremltools._deps import _HAS_TORCH, _HAS_TF_1, _HAS_TF_2
from coremltools.converters._profile_utils import _profile

from coremltools.models import _METADATA_VERSION, _METADATA_SOURCE
from coremltools.models.utils import _MLPACKAGE_EXTENSION
from coremltools.converters.mil._deployment_compatibility import (
AvailableTarget,
check_deployment_compatibility,
Expand Down Expand Up @@ -250,10 +259,10 @@ def convert(
- if False, identical to setting compute_units to `coremltools.ComputeUnit.ALL``
package_dir : str
Post conversion, the model is compiled to form the MLModel object ready for prediction.
This requires a temporary directory to hold the mlmodelc archive.
- if not None, must be a path to a directory that is used for
temporarily storing the compiled model assets. If None, a temporary directory is created.
Post conversion, the model is saved at a temporary location and
loaded to form the MLModel object ready for prediction.
If package_dir is provided, model will be saved at this location instead of creating a temporary directory.
- if not None, must be a path to a directory with extension .mlpackage
debug : bool
This flag should generally be False except for debugging purposes
Expand Down Expand Up @@ -312,8 +321,6 @@ def convert(
See `neural-network-conversion <https://coremltools.readme.io/docs/neural-network-conversion>`_ for
more advanced options.
"""
from coremltools import __version__ as ct_version

_check_deployment_target(minimum_deployment_target)
exact_source = _determine_source(model, source, outputs)
exact_target = _determine_target(convert_to, minimum_deployment_target)
Expand All @@ -337,6 +344,11 @@ def convert(
else:
raise ValueError("Invalid value of the argument 'compute_precision'")

if package_dir is not None:
_, ext = os.path.splitext(package_dir)
if ext != _MLPACKAGE_EXTENSION:
raise Exception("If package_dir is provided, it must have extension {} (not {})".format(_MLPACKAGE_EXTENSION, ext))

mlmodel = mil_convert(
model,
convert_from=exact_source,
Expand All @@ -363,8 +375,7 @@ def convert(

gc.collect()

mlmodel = _record_src_version(mlmodel, exact_source)
mlmodel.user_defined_metadata[_METADATA_VERSION] = ct_version
mlmodel = _record_build_metadata(mlmodel, exact_source)

return mlmodel

Expand Down Expand Up @@ -553,16 +564,27 @@ def _determine_target(convert_to, minimum_deployment_target):
else:
return "mlprogram"

def _record_src_version(mlmodel, exact_source):
def _record_build_metadata(mlmodel, exact_source):
# recording metadata: coremltools version, source framework and version
src_pkg, pkg_ver = None, None
if exact_source in {"tensorflow", "tensorflow2"} and (_HAS_TF_1 or _HAS_TF_2):
src_pkg, pkg_ver = "tensorflow", tf.__version__
src_pkg_version = "tensorflow=={0}".format(tf.__version__)
elif exact_source == "pytorch" and _HAS_TORCH:
src_pkg, pkg_ver = "pytorch", torch.__version__
src_pkg_version = "torch=={0}".format(torch.__version__)
elif exact_source == 'milinternal':
src_pkg, pkg_ver = "milinternal", ""
src_pkg_version = "milinternal"
else:
raise ValueError('Unsupported source {}'.format(exact_source))

mlmodel.user_defined_metadata[_METADATA_SOURCE] = src_pkg_version
mlmodel.user_defined_metadata[_METADATA_VERSION] = _ct_version

build_info = {'coremltools-version': _ct_version}
if src_pkg is not None and pkg_ver is not None:
build_info['coremltools-component-' + src_pkg] = str(pkg_ver)
mlmodel._set_build_info_mil_attributes(build_info)

return mlmodel
5 changes: 5 additions & 0 deletions coremltools/converters/keras/_topology2.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
# Copyright (c) 2021, Apple Inc. All rights reserved.
#
# Use of this source code is governed by a BSD-3-clause license that can be
# found in the LICENSE.txt file or at https://opensource.org/licenses/BSD-3-Clause

import keras as _keras
import numpy as _np

Expand Down
15 changes: 12 additions & 3 deletions coremltools/converters/mil/_deployment_compatibility.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,15 @@
# Copyright (c) 2021, Apple Inc. All rights reserved.
#
# Use of this source code is governed by a BSD-3-clause license that can be
# found in the LICENSE.txt file or at https://opensource.org/licenses/BSD-3-Clause

from enum import Enum
from coremltools import _SPECIFICATION_VERSION_IOS_13, _SPECIFICATION_VERSION_IOS_14, \
_SPECIFICATION_VERSION_IOS_15

from coremltools import (
_SPECIFICATION_VERSION_IOS_13,
_SPECIFICATION_VERSION_IOS_14,
_SPECIFICATION_VERSION_IOS_15
)


class AvailableTarget(Enum):
Expand All @@ -15,7 +24,7 @@ class AvailableTarget(Enum):
macOS10_15 = _SPECIFICATION_VERSION_IOS_13
macOS10_16 = _SPECIFICATION_VERSION_IOS_14
macOS11 = _SPECIFICATION_VERSION_IOS_14
macOS12 = _SPECIFICATION_VERSION_IOS_14
macOS12 = _SPECIFICATION_VERSION_IOS_15

# watchOS versions (aliases of iOS versions)
watchOS6 = _SPECIFICATION_VERSION_IOS_13
Expand Down
8 changes: 3 additions & 5 deletions coremltools/converters/mil/backend/mil/helper.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,15 @@
# Use of this source code is governed by a BSD-3-clause license that can be
# found in the LICENSE.txt file or at https://opensource.org/licenses/BSD-3-Clause

import numpy as np
import os
import re

import numpy as np

from coremltools.converters.mil.mil import types
from coremltools.converters.mil.mil.types import builtin_to_proto_types
from coremltools.models.model import _WEIGHTS_DIR_NAME, _WEIGHTS_FILE_NAME
from coremltools.models.utils import _WEIGHTS_DIR_NAME, _WEIGHTS_FILE_NAME
import coremltools.proto.FeatureTypes_pb2 as ft
import coremltools.proto.MIL_pb2 as pm

from coremltools.converters.mil.mil.types import (
type_to_builtin_type,
numpy_type_to_builtin_type,
Expand Down Expand Up @@ -318,4 +317,3 @@ def cast_to_framework_io_dtype(var, is_output):
ioname2 = "outputs" if is_output else "inputs"
raise NotImplementedError(ioname + var.name + " has data type " + builtin_to_string(var.dtype) + \
". ML Program models only support fp32 and int32 " + ioname2 + ".")

9 changes: 3 additions & 6 deletions coremltools/converters/mil/backend/mil/load.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,8 @@
any_variadic,
is_symbolic,
)
from coremltools.converters.mil.mil.types.type_mapping import types_int64
from coremltools.libmilstoragepython import _BlobStorageWriter as BlobWriter
from coremltools.models.model import _WEIGHTS_FILE_NAME
from coremltools.models.utils import _WEIGHTS_FILE_NAME
from coremltools.models.neural_network.flexible_shape_utils import (
add_enumerated_image_sizes,
add_multiarray_ndshape_enumeration,
Expand Down Expand Up @@ -105,8 +104,7 @@ def translate_generic_op(op, parameters, blob_writer, literal_params=[]):
]
blocks = None
if len(op.blocks) > 0:
blocks = [create_block(b, parameters, blob_writer) \
for b in op.blocks]
blocks = [create_block(b, parameters, blob_writer) for b in op.blocks]

op_type = op.op_type
attr_dict = {}
Expand Down Expand Up @@ -253,8 +251,7 @@ def load(prog, weights_dir, resume_on_errors=False, **kwargs):

function_protos = {}
for func_name, func in prog.functions.items():
function_protos[func_name] = convert_function(func, prog.parameters,
blob_writer)
function_protos[func_name] = convert_function(func, prog.parameters, blob_writer)

proto = pm.Program(
version=1,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,14 @@
# -*- coding: utf-8 -*-

# Copyright (c) 2021, Apple Inc. All rights reserved.
#
# Use of this source code is governed by a BSD-3-clause license that can be
# found in the LICENSE.txt file or at https://opensource.org/licenses/BSD-3-Clause

from coremltools.converters.mil.mil import Builder as mb
from coremltools.converters.mil.mil import types as types
import warnings as _warnings

from coremltools.converters.mil.mil import Builder as mb, types as types
from coremltools.converters.mil.mil.passes.pass_registry import register_pass
from coremltools.converters.mil.mil.passes.graph_pass import AbstractGraphPass

import warnings as _warnings

@register_pass(namespace="mil_backend")
class adjust_io_to_supported_types(AbstractGraphPass):
Expand Down Expand Up @@ -164,13 +162,11 @@ def _adjust_var(var):

def _adjust_func_inputs(func):
for input_name, input_var in func.inputs.items():
_adjust_var(input_var)

_adjust_var(input_var)

def _adjust_block_inputs(block):
for input_var in block.inputs:
_adjust_var(input_var)

_adjust_var(input_var)

def _adjust_ops(block):
len_block = len(block.operations)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
# -*- coding: utf-8 -*-

# Copyright (c) 2020, Apple Inc. All rights reserved.
#
# Use of this source code is governed by a BSD-3-clause license that can be
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
# -*- coding: utf-8 -*-

# Copyright (c) 2020, Apple Inc. All rights reserved.
#
# Use of this source code is governed by a BSD-3-clause license that can be
Expand All @@ -17,10 +15,7 @@ class sanitize_name_strings(AbstractGraphPass):
of the format [a-zA-Z_][a-zA-Z0-9_]*
"""
def apply(self, prog):
sanitizer_vars = NameSanitizer(prefix="var_")
sanitizer_ops = NameSanitizer(prefix="op_")

for f in prog.functions.values():
sanitize_block(f, sanitizer_vars, sanitizer_ops, prog.main_input_types)


for f in prog.functions.values():
sanitizer_vars = NameSanitizer(prefix="var_")
sanitizer_ops = NameSanitizer(prefix="op_")
sanitize_block(f, sanitizer_vars, sanitizer_ops, prog.main_input_types)
Loading

0 comments on commit e3032bf

Please sign in to comment.