Hi @kazum, thank you for your suggestion.I'm able to start the RPC tracker.

I'm also tried as same as @jacobpostman mostly, but while tuning the sample 
model I got the below logs.

    [Task  1/16]  Current/Best:    0.00/   0.00 GFLOPS | Progress: (15/100) | 
600.01 s[19:07:37] 
/Users/Dileep/LatestTVM/22_08/tvm/src/runtime/metal/metal_device_api.mm:137: 
Intializing Metal device 0, name=Intel Iris Pro Graphics
    [Task  1/16]  Current/Best:    0.00/   0.00 GFLOPS | Progress: (16/100) | 
640.05 s[19:08:18] 
/Users/Dileep/LatestTVM/22_08/tvm/src/runtime/metal/metal_device_api.mm:137: 
Intializing Metal device 0, name=Intel Iris Pro Graphics
    [Task  1/16]  Current/Best:    0.00/   0.00 GFLOPS | Progress: (17/100) | 
680.11 s[19:08:57] 
/Users/Dileep/LatestTVM/22_08/tvm/src/runtime/metal/metal_device_api.mm:137: 
Intializing Metal device 0, name=Intel Iris Pro Graphics
    [Task  1/16]  Current/Best:    0.00/   0.00 GFLOPS | Progress: (18/100) | 
720.17 s[19:09:38] 
/Users/Dileep/LatestTVM/22_08/tvm/src/runtime/metal/metal_device_api.mm:137: 
Intializing Metal device 0, name=Intel Iris Pro Graphics
    [Task  1/16]  Current/Best:    0.00/   0.00 GFLOPS | Progress: (19/100) | 
760.24 s[19:10:18] 
/Users/Dileep/LatestTVM/22_08/tvm/src/runtime/metal/metal_device_api.mm:137: 
Intializing Metal device 0, name=Intel Iris Pro Graphics

I always see " 0.00/ 0.00 GFLOPS" while tuning the model. whether the model is 
tuning properly or missing some thing while tuning the model ?

here is the part of code 


    target = 'metal'
    proxy_port = 9090
    key = "iphone"
    arch = "arm64"
    sdk = "iphoneos"
    target_host = "llvm -mtriple=%s-apple-darwin" % arch

    @tvm.register_func("tvm_callback_metal_compile")
    def compile_metal(src):
        return xcode.compile_metal(src, sdk=sdk)

    #### TUNING OPTION ####
    network = 'resnet-18'
    log_file = "%s.log" % network
    dtype = 'float32'

    autotvm.measure.measure_methods.check_remote = lambda *args: True

    def fcompile(*args):
        from tvm.contrib import xcode
        xcode.create_dylib(*args, arch=arch, sdk=sdk)
        path = args[0]
        xcode.codesign(path)
        xcode.popen_test_rpc(proxy_host, proxy_port, key,
                         destination=destination,
                         libs=[path])

    fcompile.output_format = "dylib"

    tuning_option = {
        'log_filename': log_file,
        'tuner': 'xgb',
        'early_stopping': None,

        'measure_option': autotvm.measure_option(
            builder=autotvm.LocalBuilder(
                n_parallel=1,
                build_func=fcompile,
                timeout=60
            ),
            runner=autotvm.RPCRunner(
                key, host='127.0.0.1', port=9190,
                number=20, repeat=3, timeout=60, min_repeat_ms=150)
        ),
    }
    def tune_tasks(tasks,
                   measure_option,
                   tuner='xgb',
                   n_trial=100,
                   early_stopping=None,
                   log_filename='tuning.log',
                   use_transfer_learning=False):
        # create tmp log file
        tmp_log_file = log_filename + ".tmp"
        if os.path.exists(tmp_log_file):
            os.remove(tmp_log_file)

        for i, tsk in enumerate(reversed(tasks)):
            prefix = "[Task %2d/%2d] " %(i+1, len(tasks))

            # create tuner
            if tuner == 'xgb' or tuner == 'xgb-rank':
                tuner_obj = XGBTuner(tsk, loss_type='rank')
            elif tuner == 'ga':
                tuner_obj = GATuner(tsk, pop_size=100)
            elif tuner == 'random':
                tuner_obj = RandomTuner(tsk)
            elif tuner == 'gridsearch':
                tuner_obj = GridSearchTuner(tsk)
            else:
                raise ValueError("Invalid tuner: " + tuner)

            if use_transfer_learning:
                if os.path.isfile(tmp_log_file):
                    
tuner_obj.load_history(autotvm.record.load_from_file(tmp_log_file))

            # do tuning
            tsk_trial = min(n_trial, len(tsk.config_space))
            tuner_obj.tune(n_trial=tsk_trial,
                           early_stopping=early_stopping,
                           measure_option=measure_option,
                           callbacks=[
                               autotvm.callback.progress_bar(tsk_trial, 
prefix=prefix),
                               autotvm.callback.log_to_file(tmp_log_file)
                           ])

        # pick best records to a cache file
        autotvm.record.pick_best(tmp_log_file, log_filename)
        os.remove(tmp_log_file)


    ########################################################################
    # Finally, we launch tuning jobs and evaluate the end-to-end performance.

    def tune_and_evaluate(tuning_opt):
        # extract workloads from relay program
        print("Extract tasks...")
        mod, params, input_shape, out_shape = get_network(network, batch_size=1)

        tasks = autotvm.task.extract_from_program(mod["main"], target=target,
                                                  params=params,
                                                  target_host=target_host,
                                                  
ops=(relay.op.get("nn.conv2d"),))

        # run tuning tasks
        print("Tuning...")
        tune_tasks(tasks, **tuning_opt)


Please let me know if anything i'm missing on the above code.

Thanks,





---
[Visit 
Topic](https://discuss.tvm.ai/t/auto-tvm-how-to-auto-tune-the-model-on-ios-device/7681/10)
 to respond.

You are receiving this because you enabled mailing list mode.

To unsubscribe from these emails, [click 
here](https://discuss.tvm.ai/email/unsubscribe/169c869406e0ac52f2aaf9cb37e8a9e28aa36a5e178deffa26f3a44313f7ef1a).

Reply via email to