有没有办法加速这一点 - 将Azure Blob存储中的csvs移动到vm,使用python

时间:2017-10-19 13:57:28

标签: python azure azure-storage-blobs azure-machine-learning-studio azure-dsvm

我的工作每天从流媒体作业中收集多次,并将csv放入blob存储中。在收集数据几周后,我将运行一个python脚本来进行一些机器学习。为了设置训练数据,我首先将一个范围内的所有数据移动到虚拟机上的单个csv中,以便它可以一次性训练该单个csv。

使用下面的代码,我发现使用blob_service.get_blob_to_path()将数据从blob存储移动到虚拟机平均每个文件需要25秒,即使它们是小3mb文件。附加部分以每个文件的毫秒速度非常快。

有更好的方法吗?我认为增加最大连接数会有所帮助,但我认为没有任何性能提升。

blob_service = BlockBlobService(account_name=ACCOUNT_NAME, account_key=ACCOUNT_KEY)

# get list of blob files?
blobs = []
marker = None
while True:
    batch = blob_service.list_blobs(CONTAINER_NAME, marker=marker)
    blobs.extend(batch)
    if not batch.next_marker:
        break
marker = batch.next_marker

for blob in blobs:
    print(time.time()-start_time)
    split_name = blob.name.split('/')
    # year/month/day...
    blob_date = pd.to_datetime(str(split_name[0])+'-'+str(split_name[1])+'-'+str(split_name[2]))
    # s=arg start date, e=arg end date
    if blob_date > s and blob_date <= e:
        print('Appending: '+ blob.name, end='')
        blob_service.get_blob_to_path(CONTAINER_NAME,blob.name,
                                        './outputs/last_blob.csv',
                                        open_mode='wb',
                                        max_connections=6)
        print(' ... adding to training csv ' +str(time.time()-start_time))
        with open('./outputs/all_training_data.csv','ab') as f_out:
            with open('./outputs/last_blob.csv','rb') as blob_in:
                for line in blob_in:
                    f_out.write(line)

    else:
        print('** SKIPPING: '+ blob.name)

附加说明: 这是使用Azure Machine Learning Workbench作为我的train.py流程的一部分完成的。

- 编辑 -

Data Science VM和存储帐户均位于SC US。 DSVM是DS4_V2标准(8c cpu,28gb内存)。 我目前的测试中所有blob的总大小可能接近200MB。

我对副本进行了定时,并且很快就会出现一些示例输出,其中时间打印与顶部的代码对齐。第一个文件需要13秒才能下载,0.01需要追加。秒需要6秒,然后0.013才能追加。第三个下载需要24秒。

1666.6139023303986
Appending: 2017/10/13/00/b1.csv ... adding to training csv 1679.0256536006927
1679.03680062294
Appending: 2017/10/13/01/b2.csv ... adding to training csv 1685.968115568161
1685.9810137748718
Appending: 2017/10/13/02/b3.csv ... adding to training csv 1709.5959916114807

这一切都发生在vm中抛出的docker容器中。我不确定它在存储/ premium / ssd方面的位置。 VM本身有56gb&#34;本地ssd&#34;作为ds4_v2的配置。

##### BEGIN TRAINING PIPELINE
# Create the outputs folder - save any outputs you want managed by AzureML here
os.makedirs('./outputs', exist_ok=True)

我没有尝试过并行路线,需要一些指导如何解决这个问题。

0 个答案:

没有答案