示例#1
0
def process_vision_models():
    data_dir = "../base-models/vision"
    if not os.path.exists(data_dir):
        os.makedirs(data_dir)

    for name, _ in torch_vision_models:
        model = torch.hub.load("pytorch/vision:v0.4.2", name, pretrained=True)
        layers = []
        get_layers(model, layers)
        sizes = get_layers_size(layers)

        model_dir = os.path.join(data_dir, name)
        if not os.path.exists(model_dir):
            os.makedirs(model_dir)
        torch.save(model.state_dict(), os.path.join(model_dir, "model.pt"))
        meta_obj = {
            "name": name,
            "total_size": sum(sizes),
            "layer_sizes": sizes
        }
        with open(os.path.join(model_dir, "meta.json"), "w") as ofile:
            json.dump(meta_obj, ofile, indent=2)

        print("processed model", name, "total size",
              sum(sizes) / (1024.0 * 1024), "MB")
示例#2
0
def vision_model_time():
    """"""

    for name, _ in torch_vision_models:
        _t = time.time()
        model = torch.hub.load("pytorch/vision:v0.4.2", name, pretrained=True)
        print("load ", name, 'cost', time.time() - _t, 's')
        _t = time.time()
        model = model.to("cuda")
        print('to cuda cost', time.time() - _t)
        model.eval()
        layers = []
        get_layers(model, layers)
        sizes = get_layers_size(layers)

        # random data
        for i in range(10):
            # pylint: disable=no-member
            data = torch.rand((1, 3, 224, 224)).to("cuda")
            torch.cuda.synchronize()
            t1 = time.time()
            outputs = model(data)
            torch.cuda.synchronize()
            t2 = time.time()

            del data
            del outputs
            torch.cuda.empty_cache()

        trans_time = sum(sizes) * 8.0 / bw
        print(name, ":: foward cost ", t2 - t1, "est. transition time",
              trans_time)

        del model
        torch.cuda.empty_cache()
示例#3
0
def main():
    wide = int(sys.stdin.readline().strip())
    tall = int(sys.stdin.readline().strip())
    data = sys.stdin.readline().strip()

    layers = get_layers(data, wide, tall)

    print(merge_layers(layers))
示例#4
0
    def test_simple(self):
        wide = 3
        tall = 2
        data = "123456789012"

        layers = list(get_layers(data, wide, tall))

        self.assertEqual(len(layers), 2)
        self.assertEqual(layers[0], "123456")
        self.assertEqual(layers[1], "789012")
示例#5
0
def process_nlp_models():
    data_dir = "../base-models/nlp"
    if not os.path.exists(data_dir):
        os.makedirs(data_dir)

    for model_class, tokenizer_class, pretrained_weights, _ in nlp_models:
        t1 = time.time()
        tokenizer = tokenizer_class.from_pretrained(
            pretrained_weights, cache_dir="./huggingface-cache")
        t2 = time.time()
        model = model_class.from_pretrained(pretrained_weights,
                                            cache_dir="./huggingface-cache")
        t3 = time.time()
        print("loading tokenizer cost", t2 - t1, "loading model cost: ",
              t3 - t2)
        # tokenizer_layers = []
        model_layers = []
        # get_layers(tokenizer, tokenizer_layers)
        get_layers(model, model_layers)

        # tokenizer_sizes = get_layers_size(tokenizer_layers)
        model_sizes = get_layers_size(model_layers)

        model_dir = os.path.join(data_dir, pretrained_weights)
        if not os.path.exists(model_dir):
            os.makedirs(model_dir)

        # tokenizer.save_pretrained(model_dir)
        torch.save(model.state_dict(), os.path.join(model_dir, "model.pt"))
        meta_obj = {
            "model": model.__class__.__name__,
            "tokenizer": tokenizer.__class__.__name__,
            "total_size": sum(model_sizes),
            "layer_sizes": model_sizes
        }
        with open(os.path.join(model_dir, "meta.json"), "w") as ofile:
            json.dump(meta_obj, ofile, indent=2)

        print("processed model", pretrained_weights, "total size",
              sum(model_sizes) / (1024.0 * 1024), "MB")
示例#6
0
def _nlp_exp(model_class, tokenizer_class, pretrained_weights, config):
    # Load pretrained model/tokenizer
    tokenizer = tokenizer_class.from_pretrained(
        pretrained_weights, cache_dir="./huggingface-cache")
    model = model_class.from_pretrained(pretrained_weights,
                                        cache_dir="./huggingface-cache")
    layers = []
    get_layers(model, layers)
    sizes = get_layers_size(layers)

    model = model.to('cuda')
    model.eval()
    for i in range(10):
        # pylint: disable=not-callable
        input_ids = torch.tensor([
            tokenizer.encode(
                "Let's see all hidden-states and attentions on this text",
                add_space_before_punct_symbol=True)
        ] * 8).to('cuda')
        torch.cuda.synchronize()
        t1 = time.time()
        outputs = model(input_ids)
        torch.cuda.synchronize()
        t2 = time.time()
        del outputs
        del input_ids
        torch.cuda.empty_cache()

    trans_time = sum(sizes) * 8.0 / bw
    print(model_class.__name__, ":: foward cost ", t2 - t1,
          "est. transition time", trans_time)

    del model
    del tokenizer
    del layers
    del sizes
    torch.cuda.empty_cache()
示例#7
0
def main():
    wide = int(sys.stdin.readline().strip())
    tall = int(sys.stdin.readline().strip())
    data = sys.stdin.readline().strip()

    layers = get_layers(data, wide, tall)

    layers_infos = [parse_infos(layer) for layer in layers]

    for info in layers_infos:
        print(info)

    def get_zero(info):
        return info.get("0", 0)

    min_layer = min(layers_infos, key=get_zero)
    print(min_layer)

    print(min_layer["1"] * min_layer["2"])