Example #1
0
def benchmark_all() -> pd.DataFrame:
    save_path = Path("./benchmark.csv")
    df = pd.DataFrame()
    if save_path.exists():
        df = pd.read_csv(str(save_path), index_col=0)
    index = []
    records = []

    bar = tqdm(models)
    try:
        for key in bar:
            if key not in df.index:
                try:
                    model = AutoModel.from_pretrained(key)
                    tr = AutoTransform.from_name(key)

                    batch_size = 64

                    if key in batch_sizes:
                        batch_size = batch_sizes[key]

                    bar.set_description(
                        f"{key}, size={tr.transforms[0].size}, batch_size={batch_size}"
                    )

                    top1, top5, time = benchmark(model.to(device), tr,
                                                 batch_size)

                    index.append(key)

                    data = {
                        "top1": top1,
                        "top5": top5,
                        "time": time,
                        "batch_size": batch_size,
                    }

                    pprint(data)
                    records.append(data)
                except KeyError:
                    continue
    except Exception as e:
        print(e)
        pass

    if len(records) > 0:
        new_df = pd.DataFrame.from_records(records, index=index)

        if df is not None:
            df = pd.concat([df, new_df])
        else:
            df = new_df

        df.to_csv("./benchmark.csv")
        mk = df.sort_values("top1", ascending=False).to_markdown()

        with open("./benchmark.md", "w") as f:
            f.write(mk)

    return df
Example #2
0
def vit_clone(key: str):
    src = timm.create_model(key, pretrained='True')
    dst = AutoModel.from_name(key)

    dst.embedding.positions.data.copy_(src.pos_embed.data.squeeze(0))
    dst.embedding.cls_token.data.copy_(src.cls_token.data)

    cfg = AutoConfig.from_name(key)

    return clone_model(src, dst,
                       torch.randn((1, 3, cfg.input_size, cfg.input_size)))
Example #3
0
def benchmark_all() -> pd.DataFrame:
    save_path = Path('./benchmark.csv')
    df = pd.DataFrame()
    if save_path.exists():
        df = pd.read_csv(str(save_path), index_col=0)
    index = []
    records = []

    bar = tqdm(models)
    try:
        for key in bar:
            if key not in df.index:
                try:
                    model = AutoModel.from_pretrained(key)
                    cfg = AutoConfig.from_name(key)
                    tr = cfg.transform

                    batch_size = 64

                    # if key in batch_sizes:
                    #     batch_size = batch_sizes[key]

                    bar.set_description(
                        f'{key}, size={cfg.input_size}, batch_size={batch_size}'
                    )

                    top1, top5, time = benchmark(model.to(device), tr,
                                                 batch_size)

                    index.append(key)

                    data = {
                        'top1': top1,
                        'top5': top5,
                        'time': time,
                        'batch_size': batch_size
                    }

                    pprint(data)
                    records.append(data)
                except KeyError:
                    continue
    except Exception as e:
        print(e)
        pass
    new_df = pd.DataFrame.from_records(records, index=index)

    if df is not None:
        df = pd.concat([df, new_df])
    else:
        df = new_df

    df.to_csv('./benchmark.csv')
    print(df)
Example #4
0
def vit_clone(key: str):
    src = timm.create_model(key, pretrained="True")
    dst = AutoModel.from_name(key)

    cfg = AutoTransform.from_name(key)

    dst = clone_model(
        src,
        dst,
        torch.randn((1, 3, cfg.input_size, cfg.input_size)),
        dest_skip=[ViTTokens],
    )

    dst.embedding.positions.data.copy_(src.pos_embed.data.squeeze(0))
    dst.embedding.tokens.cls.data.copy_(src.cls_token.data)

    return dst
def deit_clone(key: str):
    k_split = key.split('_')
    hub_key = "_".join(k_split[:2]) + '_distilled_' + "_".join(k_split[2:])
    src = torch.hub.load('facebookresearch/deit:main',
                         hub_key, pretrained=True)

    dst = AutoModel.from_name(key)

    cfg = AutoConfig.from_name(f"vit_{'_'.join(key.split('_')[1:])}")

    dst = clone_model(src, dst, torch.randn(
        (1, 3, cfg.input_size, cfg.input_size)), dest_skip=[DeiTTokens])

    dst.embedding.positions.data.copy_(src.pos_embed.data.squeeze(0))
    dst.embedding.tokens.cls.data.copy_(src.cls_token.data)
    dst.embedding.tokens.dist.data.copy_(src.dist_token.data)

    return dst
Example #6
0
    with open("pretrained_models.txt", "w") as f:
        f.write(",".join(list(zoo_source.keys())))

    if args.o is not None:
        save_dir = args.o
        save_dir.mkdir(exist_ok=True)
    storages = {"local": LocalStorage, "hf": HuggingFaceStorage}
    storage = storages[args.storage]()

    if args.storage == "local":
        logging.info(f"Store root={storage.root}")

    override = True

    bar = tqdm(zoo_source.items())
    uploading_bar = tqdm()
    for key, src_def in bar:
        bar.set_description(key)
        if src_def is None:
            # it means I was lazy and I meant to use timm
            src_def = partial(timm.create_model, key, pretrained=True)
        if key not in storage or override:
            if type(src_def) is tuple:
                # I have a custom clone func -> not the most elegant way, but it works!
                clone_func, flag = src_def
                cloned = clone_func(key)
            else:
                src, dst = src_def(), AutoModel.from_name(key)
                cloned = clone_model(src, dst)
            storage.put(key, cloned)