
# EMS存储初始化
#### 功能说明
Ems是访问EMS服务的Python客户端，它为调用者提供一系列与EMS服务进行交互的接口，提供EMS内存池健康检查等能力，以及ContextCaching等存储功能。
#### 方法定义
```
init(config)
```
#### 构造函数参数描述
表1EmsConfig 
| **参数名称**     | **参数类型**                                                             | **是否必选** | **描述**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
|:---|:---|:---|:---|
| cc_config    | [表2]                              | 否        | **参数解释：** EMS存储SDK初始化配置。 **约束限制：** 不能为None。 **取值范围**： 无。 **默认取值：** 无。                                                                         |
| cc_config_v1 | [表3] | 否        | **参数解释：** EMS存储V1版本SDK初始化配置。 **约束限制：** 不能为None。 **取值范围**： 无。 **默认取值：** 无。                                                                                                                                                                                                                                                                 |
| access_id    | string                                                               | 否        | **参数解释：** 业务访问内存池身份凭证，由用户指定并保证唯一性，用于多租隔离场景。 **约束限制：** 长度 1～512 个字符；支持数字、小写字母 "."、"-"、"_"；需全局唯一。 **取值范围**： 符合上述规则的字符串 **默认取值：** None |
| access_key   | string                                                               | 否        | **参数解释：** SDK 访问内存池资源的密钥，与 access_id 配合使用。 **约束限制：** 长度 32～256 个字符；支持数字、大小写字母、"+"、"/"、"="。 **取值范围**： 符合上述规则的字符串 **默认取值：** None               |
   
 表2CcConfig 
| **参数名称**         | **参数类型** | **是否必选** | **描述**                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
|:---|:---|:---|:---|
| rank_id          | int      | 是        | **参数解释：** 当前计算进程，使用加速卡的全局rank ID。 **约束限制：** - rank ID实例内唯一。   **取值范围：** \[0,当前实例rank个数)。 **默认取值**： 无。                                                                                               |
| device_id        | int      | 是        | **参数解释：** 当前计算进程，使用加速卡的本地节点rank ID。 **约束限制：** - 节点内唯一。   **取值范围：** \[0,当前实例本节点内rank个数) **默认取值**： 无。                                                                                                   |
| model_id         | string   | 是        | **参数解释：** 唯一标识当前实例使用的推理模型ID。 **约束限制**： - model_id创建规则：1～512个字符，支持数字、小写字母、"."、"-"、"_"。  - 需要保证全局唯一。   **取值范围：** 无。 **默认取值**： 无。 |
| tp_world_size    | int      | 否        | **参数解释：** 实例TP并行度。 **约束限制**： 必须为数字。 **取值范围**： \[1,当前实例总rank数\]。 **默认取值：** 1。                                                                                                                                                                                  |
| pp_world_size    | int      | 否        | **参数解释：** 实例PP并行度。 **约束限制**： 必须为数字。 **取值范围**： \[1,当前实例总rank数\]。 **默认取值：** 1。                                                                                                                                                                                       |
| rank_in_tp_group | int      | 否        | **参数解释：** 实例TP索引。 **约束限制**： 必须为数字。 **取值范围**： \[0,当前实例rank个数)。 **默认取值：** 0。                                                                                                                                                                                     |
| rank_in_pp_group | int      | 否        | **参数解释：** 实例PP索引。 **约束限制**： 必须为数字。 **取值范围**： \[0,当前实例rank个数)。 **默认取值：** 0。                                                                                                                                                                                          |
| kvcache_type     | string   | 否        | **参数解释：** 指定KVCache的实现类型。 **约束限制**： 必须为字符串枚举值。 **取值范围**： "GQA"、"MHA"、"MLA"、"MQA"。 **默认取值：** "MHA"。                                                                                                                                                            |
   
 表3CcConfig_v1 
| **参数名称**         | **参数类型** | **是否必选** | **描述**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
|:---|:---|:---|:---|
| rank_id          | int      | 是        | **参数解释：** 当前计算进程，使用加速卡的全局rank ID。 **约束限制：** - rank ID实例内唯一。   **取值范围：** \[0,当前实例rank个数)。 **默认取值**： 无。                                                                                                                                                  |
| device_id        | int      | 是        | **参数解释：** 当前计算进程，使用加速卡的本地节点rank ID。 **约束限制：** - 节点内唯一。   **取值范围：** \[0,当前实例本节点内rank个数) **默认取值**： 无。                                                                                                                                                   |
| model_id         | string   | 是        | **参数解释：** 唯一标识当前实例使用的推理模型ID。 **约束限制**： - model_id创建规则：1～512个字符，支持数字、小写字母、"."、"-"、"_"。  - 需要保证全局唯一。   **取值范围：** 无。 **默认取值**： 无。 |
| tp_world_size    | int      | 否        | **参数解释：** 实例TP并行度。 **约束限制**： 必须为数字。 **取值范围**： \[1,当前实例总rank数\]。 **默认取值：** 1。                                                                                                                                                                                                                                                                                                       |
| pp_world_size    | int      | 否        | **参数解释：** 实例PP并行度。 **约束限制**： 必须为数字。 **取值范围**： \[1,当前实例总rank数\]。 **默认取值：** 1。                                                                                                                                                                                                                                                                                                    |
| rank_in_tp_group | int      | 否        | **参数解释：** 实例TP索引。 **约束限制**： 必须为数字。 **取值范围**： \[0,当前实例rank个数)。 **默认取值：** 0。                                                                                                                                                                                                                                                                                                       |
| rank_in_pp_group | int      | 否        | **参数解释：** 实例PP索引。 **约束限制**： 必须为数字。 **取值范围**： \[0,当前实例rank个数)。 **默认取值：** 0。                                                                                                                                                                                                                                                                                                        |
| llm_engine       | string   | 否        | **参数解释：** 当前实例的推理引擎。 **约束限制**： 必须为字符串。 **取值范围**： 无（通常为"vllm"，如需对接其他推理引擎时可修改）。 **默认取值：** "vllm"。                                                                                                                                                                                                                                                                                   |
| kvcache_type     | string   | 否        | **参数解释：** 指定KVCache的实现类型。 **约束限制**： 必须为字符串枚举值。 **取值范围**： "GQA"、"MHA"、"MLA"、"MQA"。 **默认取值：** "MHA"。                                                                                                                                                                                                                                                                                |
   
![](https://support.huaweicloud.com/sdk-python-devg-ems/public_sys-resources/note_3.0-zh-cn.png)
- 如果初始化参数校验失败或者因与EMS内存池连接失败，可以参考[异常处理](https://support.huaweicloud.com/sdk-python-devg-ems/obs_22_0020.html)捕获异常，避免阻塞推理服务启动；同时根据异常信息，初步分析原因并联系EMS工程师。
 
#### 代码样例
- 初始化Ems，示例为支持ContextCaching对象初始化：
  ```
  # 引入模块 
  import os 
  from ems import Ems, EmsConfig, EmsException, CcConfig 
   
  # 初始化cc配置 
  cc_config = CcConfig(rank_id=8, device_id=0, model_id="llama2-13b") 
  # 初始化Ems 
  config = EmsConfig(cc_config=cc_config) 
  try: 
      Ems.init(config) 
  except EmsException as e: 
      print(f"exception: {e}.")
  ```
  
![](https://support.huaweicloud.com/sdk-python-devg-ems/public_sys-resources/note_3.0-zh-cn.png)
- 一个进程中只会初始化一次Ems，以及Context Caching对象。
 
