从Azure Blob容器加载SentenceTransformer模型遇属性错误排查
问题根源
get_blob_to_path这个方法确实已经从最新版的azure-storage-blob(v12+)中移除了。Azure的存储SDK在v12版本做了彻底重构,旧版的API结构完全被替换,所以你用新版SDK调用这个旧方法会报错。
正确操作步骤
要从Azure Blob容器加载SentenceTransformer模型,得先把模型的所有文件下载到本地目录,再用SentenceTransformer加载本地路径。具体代码如下:
初始化客户端并下载模型文件
首先明确模型所在的容器是fla-models,模型文件夹是all-MiniLM-L6-v2,需要把这个文件夹下的所有文件都下载到本地:from azure.storage.blob import BlobServiceClient from sentence_transformers import SentenceTransformer import os # 替换成你的Blob账户信息和凭据 account_url = "https://<name_of_my_blob>.blob.core.windows.net/" credential = "<你的凭据>" # 可以是连接字符串、SAS令牌或者Azure AD凭据 service_client = BlobServiceClient(account_url=account_url, credential=credential) # 模型在Blob中的位置 container_name = "fla-models" model_blob_folder = "all-MiniLM-L6-v2/" # 本地保存模型的目录 local_model_dir = "./all-MiniLM-L6-v2" # 创建本地目录(不存在的话自动创建) os.makedirs(local_model_dir, exist_ok=True) # 获取容器客户端 container_client = service_client.get_container_client(container_name) # 遍历模型文件夹下的所有文件并下载 for blob in container_client.list_blobs(name_starts_with=model_blob_folder): # 构造本地文件路径,去掉Blob里的文件夹前缀 local_file_path = os.path.join(local_model_dir, blob.name[len(model_blob_folder):]) # 创建子目录(如果模型有嵌套文件夹) os.makedirs(os.path.dirname(local_file_path), exist_ok=True) # 下载文件到本地 with open(local_file_path, "wb") as file: file.write(container_client.download_blob(blob.name).readall())加载模型
下载完成后,直接用本地路径加载模型:model = SentenceTransformer(local_model_dir)
额外提示
- 要是不想把模型持久化在本地,可以用
tempfile模块创建临时目录,加载完模型后再删除临时文件。 - 确保你的Azure凭据有该Blob容器的读取权限,不然会触发权限错误。
内容的提问来源于stack exchange,提问作者Wiliam
相关产品推荐
相关产品推荐

