Skip to content

Commit c4b029d

Browse files
authored
Update ETCoreMLModelManager.mm
1 parent c69c84f commit c4b029d

File tree

1 file changed

+38
-37
lines changed

1 file changed

+38
-37
lines changed

backends/apple/coreml/runtime/delegate/ETCoreMLModelManager.mm

Lines changed: 38 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -711,112 +711,113 @@ - (BOOL)executeModelWithHandle:(ModelHandle *)handle
711711
loggingOptions:(const executorchcoreml::ModelLoggingOptions&)loggingOptions
712712
eventLogger:(const executorchcoreml::ModelEventLogger* _Nullable)eventLogger
713713
error:(NSError * __autoreleasing *)error {
714+
BOOL result = NO;
714715
id<ETCoreMLModelExecutor> executor = [self executorWithHandle:handle];
715716
if (!executor) {
716717
ETCoreMLLogErrorAndSetNSError(error,
717-
ETCoreMLErrorInternalError,
718-
"Model is already unloaded.");
719-
return NO;
718+
0,
719+
"%@: Model is already unloaded.",
720+
NSStringFromClass(self.class));
721+
return result;
720722
}
721-
723+
722724
ETCoreMLModel *model = executor.model;
723725
if (args.count != model.orderedInputNames.count + model.orderedOutputNames.count) {
724726
ETCoreMLLogErrorAndSetNSError(error,
725727
ETCoreMLErrorCorruptedModel,
726-
"Model is invalid, expected args count to be %lu but got %lu.",
728+
"%@: Model is invalid, expected args count to be %lu but got %lu.",
729+
NSStringFromClass(self.class),
727730
static_cast<unsigned long>(model.orderedInputNames.count + model.orderedOutputNames.count),
728731
args.count);
729-
return NO;
732+
return result;
730733
}
731734
NSError *localError = nil;
732-
NSArray<MLMultiArray *> *modelOutputs = nil;
733735
@autoreleasepool {
734736
NSArray<MLMultiArray *> *inputs = [args subarrayWithRange:NSMakeRange(0, model.orderedInputNames.count)];
735737
NSArray<MLMultiArray *> *outputs = [args subarrayWithRange:NSMakeRange(model.orderedInputNames.count, args.count - model.orderedInputNames.count)];
736738
NSArray<MLMultiArray *> *outputBackings = @[];
737739
if (executor.ignoreOutputBackings == NO) {
738740
outputBackings = outputs;
739741
}
740-
741-
modelOutputs = [self executeModelUsingExecutor:executor
742-
inputs:inputs
743-
outputBackings:outputBackings
744-
loggingOptions:loggingOptions
745-
eventLogger:eventLogger
746-
error:error];
742+
NSArray<MLMultiArray *> *modelOutputs = [self executeModelUsingExecutor:executor
743+
inputs:inputs
744+
outputBackings:outputBackings
745+
loggingOptions:loggingOptions
746+
eventLogger:eventLogger
747+
error:&localError];
747748
if (modelOutputs) {
748749
::set_outputs(outputs, modelOutputs);
750+
result = YES;
749751
}
750752
}
751-
if (!modelOutputs) {
753+
if (!result) {
752754
if (error) {
753755
*error = localError;
754756
}
755-
return NO;
756757
}
757-
return YES;
758+
return result;
758759
}
759760

760761
- (BOOL)executeModelWithHandle:(ModelHandle *)handle
761762
argsVec:(std::vector<executorchcoreml::MultiArray>&)argsVec
762763
loggingOptions:(const executorchcoreml::ModelLoggingOptions&)loggingOptions
763764
eventLogger:(const executorchcoreml::ModelEventLogger* _Nullable)eventLogger
764765
error:(NSError * __autoreleasing *)error {
766+
BOOL result = NO;
765767
id<ETCoreMLModelExecutor> executor = [self executorWithHandle:handle];
766768
if (!executor) {
767769
ETCoreMLLogErrorAndSetNSError(error,
768-
ETCoreMLErrorInternalError,
769-
"Model is already unloaded.");
770-
return NO;
770+
0,
771+
"%@: Model is already unloaded.",
772+
NSStringFromClass(self.class));
773+
return result;
771774
}
772-
773775
ETCoreMLModel *model = executor.model;
774776
if (argsVec.size() != model.orderedInputNames.count + model.orderedOutputNames.count) {
775777
ETCoreMLLogErrorAndSetNSError(error,
776778
ETCoreMLErrorCorruptedModel,
777-
"Model is invalid, expected args count to be %lu but got %lu.",
779+
"%@: Model is invalid, expected args count to be %lu but got %lu.",
780+
NSStringFromClass(self.class),
778781
static_cast<unsigned long>(model.orderedInputNames.count + model.orderedOutputNames.count),
779782
argsVec.size());
780-
return NO;
783+
return result;
781784
}
782-
783785
std::vector<executorchcoreml::MultiArray> inputArgs(argsVec.begin(), argsVec.begin() + model.orderedInputNames.count);
784786
std::vector<executorchcoreml::MultiArray> outputArgs(argsVec.begin() + model.orderedInputNames.count, argsVec.end());
785787
NSError *localError = nil;
786-
NSArray<MLMultiArray *> *modelOutputs = nil;
787788
@autoreleasepool {
788-
NSArray<MLMultiArray *> *inputs = [model prepareInputs:inputArgs error:error];
789+
NSArray<MLMultiArray *> *inputs = [model prepareInputs:inputArgs error:&localError];
789790
if (inputs) {
790791
NSArray<MLMultiArray *> *outputBackings = @[];
791792
if (executor.ignoreOutputBackings == NO) {
792-
outputBackings = [model prepareOutputBackings:outputArgs error:error];
793+
outputBackings = [model prepareOutputBackings:outputArgs error:&localError];
793794
}
794795
if (outputBackings) {
795-
modelOutputs = [self executeModelUsingExecutor:executor
796-
inputs:inputs
797-
outputBackings:outputBackings
798-
loggingOptions:loggingOptions
799-
eventLogger:eventLogger
800-
error:error];
801-
if (!modelOutputs) {
796+
NSArray<MLMultiArray *> *modelOutputs = [self executeModelUsingExecutor:executor
797+
inputs:inputs
798+
outputBackings:outputBackings
799+
loggingOptions:loggingOptions
800+
eventLogger:eventLogger
801+
error:&localError];
802+
if (modelOutputs) {
802803
// Resize for dynamic shapes
803804
for (int i = 0; i < outputArgs.size(); i++) {
804805
auto new_size = to_vector<size_t>(modelOutputs[i].shape);
805806
outputArgs[i].resize(new_size);
806807
argsVec[model.orderedInputNames.count + i].resize(new_size);
807808
}
808809
::set_outputs(outputArgs, modelOutputs);
810+
result = YES;
809811
}
810812
}
811813
}
812814
}
813-
if (!modelOutputs) {
815+
if (!result) {
814816
if (error) {
815817
*error = localError;
816818
}
817-
return NO;
818819
}
819-
return YES;
820+
return result;
820821
}
821822

822823
- (BOOL)unloadModelWithHandle:(ModelHandle *)handle {

0 commit comments

Comments
 (0)