华为云用户手册
-
DEW服务资源分配的机制是什么? DEW服务资源以region为大资源池,以每个客户单独的资源或服务为小资源池,后台有默认流量限制。对单个用户来说如果流量过大超过阈值会造成服务速度缓慢限制。对于有相应大流量需求的客户而言,可根据实际情况和需求进行后台资源变更。 如果客户业务量确实较大超出限制,可以通过提工单增加配额,DEW服务通过后台对客户限制进行调整,可为客户开通专属配置集群提供支撑,保证业务平稳运行。 父主题: 产品咨询
-
创建 数据加密 密钥 KMS仅支持通过调用API接口的方式创建、加密和解密数据加密密钥。创建数据加密密钥有两种方式,如下: 调用create-datakey接口,返回数据加密密钥的明文和使用您指定的CMK加密后的数据加密密钥的密文。 调用create-datakey-without-plaintext接口,返回使用您指定的CMK加密后的数据加密密钥的密文。当您需要获取数据加密密钥的明文时,请调用decrypt-datakey接口对该密文进行解密。
-
信封加密方式有什么优势? 信封加密方式,是一种加密手段,将加密数据的数据密钥封入信封中存储、传递和使用,不再使用用户主密钥直接加解密数据。 信封加密方式优势如下: 相对于KMS提供的另一种加密方式:KMS用户主密钥直接加密 使用KMS用户主密钥直接加密:是通过KMS界面使用在线工具加解密数据,或者调用KMS的API接口使用指定的用户主密钥直接加密、解密数据。 使用KMS用户主密钥直接加解密数据仅适用于不大于4KB的小数据加解密场景;而信封加密方式可以在本地对大量数据进行加解密。 信封加密方式加解密数据,只需要传输数据加密密钥到KMS服务端,无需通过网络传输大量数据。 相对于直接加解密的云服务 安全性 由云服务直接为用户加解密数据:通过因特网将敏感信息从客户手中传递到服务的过程中会存在诸多风险,例如:窃听、钓鱼。 信封加密方式:KMS通过使用硬件安全模块HSM保护密钥的安全,所有的用户密钥都由HSM中的根密钥保护,避免密钥泄露。 信任和可信证明 由云服务直接为用户加解密数据:信任和可信证明较难做。用户不一定信任云服务,愿意上传如此敏感的数据;云服务也难以证明自己不会误用和泄露这些数据。 信封加密方式:KMS对密钥的所有操作都会进行访问控制及日志跟踪,提供所有密钥的使用记录,满足审计和合规性要求。 性能、成本 由云服务直接为用户加解密数据:大量数据需要通过安全信道传递到服务端,加密后再返回给用户,这一过程,对用户服务的性能影响很大。另外,大量的移动数据会带来巨大的成本。 信封加密方式:可以通过KMS的密码运算API在线生成数据密钥,用离线数据密钥在本地加密大量数据。 父主题: 密钥管理
-
解决方法 按照以下说明,在没有任何业务的机器,或创建临时机器,使用bash命令安装修补版本的GmSSL。 请使用没有任何业务的机器,或创建临时机器执行以下操作。 以root用户完成以下操作步骤,以确保您对使用此命令的目录和二进制文件拥有正确的权限。 sudo su - 下载的最新GmSSL版本。 下载地址:https://www.github.com/guanzhi/GmSSL/ 使用以下命令下载并解压缩二进制文件。 下载最新版本的GmSSL版本。 curl -LO https://github.com/guanzhi/GmSSL/archive/GmSSL-v2.zip unzip GmSSL-GmSSL-v2.zip cd GmSSL-GmSSL-v2 复制并粘贴此数据块,然后在您的设备上选择输入。 sed -i "/BIO_get_cipher_ctx(benc, &ctx);/a\ EVP_CIPHER_CTX_set_flags(ctx, EVP_CIPHER_CTX_FLAG_WRAP_ALLOW);" apps/enc.c 重新编译并安装GmSSL。 ./config && make && make install 如果执行GmSSL命令报如下错误: “gmssl: relocation error: gmssl: symbol PBEPA RAM _it, version OPENSSL_xxxx not defined in file libcrypto.so.1.1 with link time reference” 则在当前Shell会话中,执行如下命令: export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$(pwd) 如果您执行此命令时更改过当前路径,请先cd到编译结果的目录。 cd GmSSL-GmSSL-v2 再执行上面的export命令。
-
什么是区域、可用区? 通常使用区域和可用区来描述数据中心的位置,您可以在特定的区域、可用区创建资源。 区域(Region):从地理位置和网络时延维度划分,同一个Region内共享弹性计算、块存储、对象存储、VPC网络、弹性公网IP、镜像等公共服务。Region分为通用Region和专属Region,通用Region指面向公共租户提供通用云服务的Region;专属Region指只承载同一类业务或只面向特定租户提供业务服务的专用Region。 可用区(AZ,Availability Zone):一个AZ是一个或多个物理数据中心的集合,有独立的风火水电,AZ内逻辑上再将计算、网络、存储等资源划分成多个集群。一个Region中的多个AZ间通过高速光纤相连,以满足用户跨AZ构建高可用性系统的需求。 图1阐明了区域和可用区之间的关系。 图1 区域和可用区 目前,华为云已在全球多个地域开放云服务,您可以根据需求选择适合自己的区域和可用区。
-
如何选择区域? 选择区域时,您需要考虑以下几个因素: 地理位置 一般情况下,建议就近选择靠近您或者您的目标用户的区域,这样可以减少网络时延,提高访问速度。 在除中国大陆以外的亚太地区有业务的用户,可以选择“中国-香港”、“亚太-曼谷”或“亚太-新加坡”区域。 在非洲地区有业务的用户,可以选择“非洲-约翰内斯堡”区域。 在拉丁美洲地区有业务的用户,可以选择“拉美-圣地亚哥”区域。 资源的价格 不同区域的资源价格可能有差异,请参见华为云服务价格详情。
-
哪些云服务使用KMS加密数据? 对象存储服务 、云硬盘、 镜像服务 、弹性文件服务、文档数据库服务和云数据库借助KMS实现了加密特性。 表1 使用KMS加密的云服务列表 服务名称 如何使用 参考文档 对象存储服务 OBS 对象存储服务支持普通方式和服务端加密方式上传和下载对象。当用户使用服务端加密方式上传对象时,数据会在服务端加密成密文后安全地存储在对象存储服务中;用户下载加密对象时,存储的密文会先在服务端解密为明文,再提供给用户。对象存储服务支持KMS托管密钥的服务端加密方式(即SSE-KMS加密方式),该加密方式是通过KMS提供密钥的方式进行服务端加密。 OBS服务端加密 云硬盘 EVS 在创建云硬盘时,用户启用云硬盘的加密功能,系统将使用用户主密钥产生的数据密钥对磁盘进行加密,则在使用该云硬盘时,存储到云硬盘的数据将会自动加密。 EVS服务端加密 镜像服务 IMS 用户通过外部镜像文件创建私有镜像时,可启用私有镜像加密功能,选择KMS提供的用户主密钥对镜像进行加密。 IMS服务端加密 弹性文件服务 SFS 用户通过弹性文件服务创建文件系统时,选择KMS提供的用户主密钥对文件系统进行加密,当使用该文件系统时,存储到文件系统的文件将会自动加密。 SFS服务端加密 云数据库 RDS 在购买数据库实例时,用户启用数据库实例的磁盘加密功能,选择KMS提供的用户主密钥对数据库实例的磁盘进行加密,选择磁盘加密后会提高数据的安全性。 RDS数据库加密 文档数据库服务 DDS 在购买文档数据库实例时,用户启用文档数据库实例的磁盘加密功能,选择KMS提供的用户主密钥对文档数据库实例的磁盘进行加密,选择磁盘加密后会提高数据的安全性。 DDS数据库加密 弹性云服务器 E CS 弹性云服务器是通过镜像加密或者数据盘加密来实现ECS资源加密。 在创建弹性云服务器时,您如果选择加密镜像,弹性云服务器的系统盘会自动开启加密功能,加密方式与镜像保持一致。镜像加密请参见IMS服务端加密。 在创建弹性云服务器时,您也可以对添加的数据盘进行加密。 数据盘加密请参见EVS服务端加密。 ECS服务端加密 高性能弹性文件服务 SFS Turbo 创建SFS Turbo文件系统时,选择KMS提供的密钥对文件系统进行加密,使核心数据更安全。 创建SFS Turbo文件系统 专属主机 DeH 用户加密,是指用户通过提供的加密特性,对弹性云服务器资源进行加密,从而提升数据的安全性。用户加密功能包括镜像加密和云硬盘加密。 专属主机加密 函数工作流 FunctionGraph 若需在函数运行时解密敏感数据(如数据库密码、API密钥),可通过KMS SDK动态操作密钥。用户可以将加解密密钥托管在KMS,并在 IAM 服务为函数创建委托授权FunctionGraph访问KMS。 用户配置安全 云硬盘备份 VBS 云硬盘备份的加密功能依赖于密钥管理服务。加密云硬盘的备份数据会以加密方式存放。 创建云硬盘备份 云容器引擎 CCE 可以使用KMS密钥对CCE中存储的Kubernetes Secret对象进行信封加密,为应用程序的敏感数据提供安全保护。 使用KMS进行Secret落盘加密 专属分布式存储服务 DSS 当您由于业务需求从而需要对存储在磁盘的数据进行加密时,EVS为您提供加密功能,可以对新创建的磁盘进行加密。加密磁盘使用的密钥由数据加密服务(DEW,Data Encryption Workshop)中的密钥管理(KMS,Key Management Service)功能提供,无需您自行构建和维护密钥管理基础设施,安全便捷。 磁盘加密 云容器实例 CCI 云容器实例支持将云硬盘(EVS)挂载到容器中,将通过KMS对云硬盘进行加密。 云硬盘存储卷 容器镜像服务 SWR 容器镜像服务企业版支持使用数据加密服务(DEW)中创建的密钥对镜像进行签名,保障镜像分发部署过程中的一致性,避免中间人攻击和非法镜像更新及运行。 镜像签名 云数据库 TaurusDB 透明数据加密(Transparent Data Encryption,简称TDE),对数据文件执行实时I/O加密和解密,数据在写入磁盘之前进行加密,从磁盘读入内存时进行解密,能有效保护数据库及数据文件的安全。 开启TaurusDB透明数据加密 云运维中心 COC 为了更加安全地保护您的主机账号密码,云运维中心会使用KMS来加密您的主机账号密码。在使用密钥管理之前,请先在KMS创建好密钥。 密钥管理 数据仓库 服务 GaussDB (DWS) 在DWS中,可以为集群启用数据库加密,以保护静态数据。当您为集群启用加密时,该集群及其快照的数据都会得到加密处理。 DWS数据库加密 云数据迁移 CDM 在迁移文件到文件系统时,CDM支持通过KMS提供的密钥对文件加解密。 迁移文件时加解密 工业数字模型驱动引擎 iDME 数据建模引擎运行SDK资源规划,可对属性的值加密。 规划数据建模引擎SDK资源 数据安全中心 DSC 通过加密算法和加密主密钥生成一种加密配置,达到数据脱敏的效果。 加密脱敏 父主题: 密钥管理
-
调用encrypt-data接口,返回的密文和明文有什么关系? encrypt-data接口返回的密文数据基础长度为124字节。密文数据由“密钥ID”、“加密算法”、“密钥版本”、“密文摘要”等字段拼接组成。 明文按照每个分组16个字节进行处理,不足16字节的,补码至16字节。所以密文长度为124+Ceil(明文长度/16)*16,并将结果进行Base64编码。 以4字节明文输入为例,先计算结果124+Ceil(4/16)*16=140。140字节进行Base64编码后为188字节。 Ceil为向上取整函数。 Ceil(a) = 1, a的取值范围是(0,1]。 父主题: 密钥管理
-
专属加密是否支持切换密码机? 创建专属加密实例后,无论是否成功,均不支持切换密码机。如果您想切换密码机类型,则需要重新购买,具体操作请参见购买专属加密实例。 不同之处在于: 如果成功创建专属加密实例后,不支持切换密码机,也不支持退订。如果您想切换密码机类型,则需要重新购买。 如果创建专属加密实例失败,不支持切换密码机,但可申请退款。 可以单击该专属加密实例所在行的“删除”,删除专属加密实例,并以工单的形式申请退款。 然后,如果您想切换密码机类型,再重新购买。 切换加密机类型后,用户无法将原有的根密钥导入到新的加密机类型中。 父主题: 专属加密
-
KPS密钥对任务常见失败信息 错误大类 失败信息 错误原因 解决方案 SSH连接失败 Server login credential invalid. Message:****** 使用用户提供的鉴权信息SSH登录弹性云服务器失败,可能原因: 用户提供了错误的鉴权信息。 用户修改了弹性云服务器的SSH配置。 云服务器多次鉴权失败后锁定、其它。 使用密码、私钥登录弹性云服务器,检查密码是否正确。 SSH connect refuse. Check your port. 使用用户提供的鉴权信息SSH登录弹性云服务器失败,可能原因:SSH服务未绑定给定端口、或SSH服务异常。 SSH登录弹性云服务器,检查服务端口监听情况。 Timeout: socket is not established. Check your security group rules. 使用用户提供的鉴权信息SSH登录弹性云服务器失败,可能原因: 弹性云服务器安全组给定SSH端口入方向未对100.125.0.0/16开放。 弹性 云服务器配置 了相应防火墙规则。 SSH登录弹性云服务器,检查安全组、防火墙规则。 弹性云服务器状态检查失败 The current server is executing 弹性云服务器状态检查失败,可能原因:云服务器正在创建。 等待云服务器创建成功。 Image info of Server not found 弹性云服务器状态检查失败,可能原因:使用了未注册镜像。 使用注册镜像。 Server Operating System is not supported 弹性云服务器状态检查失败,可能原因:使用了不支持的操作系统类型。 使用KPS服务支持的操作系统类型。 The server status error 弹性云服务器状态检查失败,可能原因: 机器状态不是ACTIVE。 机器状态不是SHUTOFF。 在弹性云服务器控制台进行操作,使其为对应状态。 The system volume is not found 弹性云服务器状态检查失败,可能原因:查询弹性云服务器所挂载的磁盘失败。 在弹性云服务器控制台进行操作,为其挂载磁盘。 绑定密钥对失败 Batch to bind ECS keypair exceed the max limit. 批量绑定密钥对失败,可能原因:批量绑定密钥对数量超过限额。 减少批量绑定数量。 Batch to bind ECS keypair name is inconsistency. 批量绑定密钥对失败,可能原因:不同密钥对批量绑定。 只允许相同的密钥对进行批量绑定。 * ecs flavor * is unavailable. 绑定密钥对失败,可能原因:获取规格信息失败。 检查弹性云服务器规格信息。 密钥对接口参数检查 The imported private key does not match the public key 密钥对检查失败,可能原因: 当前公私钥格式有误。 非同一对公私钥。 检查公私钥格式、检查公私钥是否同一对密钥对。 Invalid parameter 密钥对接口参数检查失败,可能原因: 必填参数为空。 密钥对名不合法。 其它参数不在规定取值范围内。 检查调用参数。 keypair type invalid 密钥对接口参数检查失败,可能原因:密钥对type必须为ssh或x509。 检查调用参数。
-
处理方法 可参照以下方法进行常规排查: 查看弹性云服务器的状态。 运行中,请执行步骤 2。 关机,请执行步骤 5。 使用密码登录弹性云服务器,检查密码是否正确。 正确,请执行步骤 4。 错误,请使用正确的密码再次执行绑定密钥对操作。 检查弹性云服务器的“/root/.ssh/authorized_keys”文件权限路径和属组是否被修改过。 是,请恢复至以下权限: 每级属组都是root:root权限。 .ssh权限为700。 authorized_keys权限为600。 否,请执行步骤 4。 检查弹性云服务器的“/root/.ssh/authorized_keys”文件是否被修改过。 是,请根据实际情况恢复“/root/.ssh/authorized_keys”文件的原始内容。 否,请执行步骤 5。 检查ECS安全组22端口入方向是否对100.125.0.0/16开放,即允许100.125.0.0/16地址通过SSH远程连接到Linux弹性云服务器。 是,请执行步骤 6。 否,请添加如下安全组规则后再次执行绑定密钥对操作。添加安全组规则具体操作请参见添加安全组规则。 方向 协议/应用 端口 源地址 入方向 SSH(22) 22 100.125.0.0/16 请检查执行密钥对绑定操作的弹性云服务器是否可以正常开机、关机和登录使用等操作。 是,请再次执行绑定密钥对操作。 否,请执行步骤 7。 检查网络是否发生故障。 是,请联系技术支持工程师查看并定位原因。 否,请再次执行绑定密钥对操作。
-
通用文件系统是否支持修改挂载目录的元数据 当挂载通用文件系统的根目录时,不支持修改挂载目录的元数据。 如果您想修改通用文件系统的根目录,可以在通用文件系统中创建一个子目录,通过挂载子目录的方式修改挂载目录的元数据,例如修改chmod(修改文件或目录的权限)、chown(修改文件或目录的所有者)、chgrp(修改文件或目录的所属组)等元数据信息。 例如: 执行如下命令挂载根目录“sfs-new”时,不支持修改所映射到本地挂载目录的元数据: mount -t nfs -o vers=3,retrans=1,timeo=600,noresvport,nolock,proto=tcp sfs.lz13.cn-north-4.myhuaweicloud.com:/sfs-new /localfolder 图1 修改挂载目录元数据失败界面 执行如下命令在该通用文件系统中创建子目录“sub_dir”。 mkdir sub_dir 执行如下命令解除以上挂载。 umount /localfolder 执行如下命令重新挂载子目录“sub_dir”时,支持修改挂载目录的元数据,则间接修改了根目录“sfs-new”的元数据: mount -t nfs -o vers=3,retrans=1,timeo=600,noresvport,nolock,proto=tcp sfs.lz13.cn-north-4.myhuaweicloud.com:/sfs-new/sub_dir /localfolder 图2 修改挂载目录元数据成功界面 父主题: 其他类
-
摊销成本的企业项目和标签归属 包年/包月: 企业项目归属:默认归属的企业项目为用户下单时选择的企业项目,也可以手动修改为按资源当天归属的企业项目进行分摊(功能还在公测中)。 标签归属:从2021.06.01起,包年/包月资源每日摊销成本归属的成本标签,按照分摊计算时资源归属的标签进行匹配;历史已摊销成本归属的成本标签不会随资源归属标签的变化而改变。 按需资源: 根据按需资源结算时归属的企业项目和成本标签进行分摊,按需资源结算周期的详细说明请参见按需产品结算周期说明。 资源包: 企业项目/标签归属:资源包被抵扣部分的摊销成本归属于被抵扣资源的企业项目/标签。剩余未抵扣部分的企业项目/标签均是未归集。 该规则只应用在资源包分摊规则支持的范围内,不在范围内的沿用包年/包月分摊归属逻辑,详情请见资源包分摊规则。
-
约束限制 创建高可用只读实例,需要具有相应的操作权限,您可以联系客服人员申请。 创建高可用只读实例时,存储类型支持SSD云盘,性能规格仅支持独享型。 转为高可用只读实例时,原只读存储类型支持SSD云盘,性能规格仅支持独享型。 创建时不支持设置证书、磁盘加密、端口、子网信息,上述信息均与已有高可用只读一致,如果没有创建过高可用只读实例,则与主实例保持一致。 证书、磁盘加密、端口、子网信息跟已有高可用只读一致(若没有高可用只读,则跟主实例一致)时,非高可用只读才可变更到高可用只读。 创建高可用只读或是变更到高可用只读时,需要保证实例所在子网的可用私有IP数量≥ 3。 不建议修改高可用只读实例的参数,否则会影响到高可用只读的可靠性。 高可用只读不允许进行如下操作:修改端口、转换到非高可用只读实例。 建议创建只读实例时,设置实例规格不低于主实例,否则可能导致创建只读失败和复制延迟升高。 创建只读实例时不要有DDL操作,否则可能会导致创建只读失败。
-
Step3 配置NPU环境 在Notebook的terminal中执行如下命令进行环境配置。 配置需要的NPU卡。 export ASCEND_RT_VISIBLE_DEVI CES =0,1,2,3 0,1,2,3修改为需要使用的卡,如需使用全部8张卡,修改为0,1,2,3,4,5,6,7。 配置PYTHONPATH。 export PYTHONPATH=$PYTHONPATH:${vllm_path} ${vllm_path}:指定到ascend_vllm文件夹的绝对路径。 进入工作目录。 cd ascend_vllm
-
Step4 部署并启动推理服务 在Step3中的terminal部署并启动推理服务。有2种方式,使用vllm-api启动推理服务,或者使用openai-api启动推理服务。参考命令如下: # 使用vllm-api python vllm/entrypoints/api_server.py \ --model="${model_path}" \ --tensor-parallel-size 1 \ --gpu-memory-utilization 0.95 \ --max-model-len=4096 \ --trust-remote-code \ --dtype="float16" \ --host=0.0.0.0 \ --port=8080 # 使用openai-api python vllm/entrypoints/openai/api_server.py \ --model="${model_path}" \ --tensor-parallel-size 1 \ --gpu-memory-utilization 0.95 \ --max-model-len=4096 \ --trust-remote-code \ --dtype="float16" \ --host=0.0.0.0 \ --port=8080 参数说明: --model:模型地址,模型格式是Huggingface的目录格式。 --tensor-parallel-size:并行卡数。 --gpu-memory-utilization:0~1之间的float,实际使用的显存是系统读取的最大显存*gpu-memory-utilization。 --max-model-len:最大数据输入+输出长度,不能超过模型配置文件config.json里面定义的“max_position_embeddings”和“seq_length”;如果设置过大,会占用过多显存,影响kvcache的空间。不同模型推理支持的max-model-len长度不同,具体差异请参见附录:基于vLLM(v0.3.2)不同模型推理支持的max-model-len长度说明。 --hostname:服务部署的IP,使用本机IP 0.0.0.0。 --port:服务部署的端口。 服务启动后,会打印如下信息。 server launch time cost: 15.443044185638428 s INFO: Started server process [2878] INFO: Waiting for application startup. INFO: Application startup complete. INFO: Uvicorn running on http://0.0.0.0:8080 (Press CTRL+C to quit)
-
Step6 推理服务的高阶配置(可选) 如需开启以下高阶配置,请在Step3 配置NPU环境时增加需要开启的高阶配置参数。 词表切分 在分布式场景下,默认不使用词表切分能提升推理性能,同时也会增加单卡的显存占用。不建议开启词表并行,如确需使用词表切分,配置以下环境变量。 export USE_VOCAB_PARALLEL=1 关闭词表切分的命令: unset USE_VOCAB_PARALLEL 配置后重启推理服务生效。 Matmul_all_reduce融合算子 使用Matmul_all_reduce融合算子能提升全量推理性能,该算子对驱动和固件版本要求较高,默认不开启。如需开启,配置以下环境变量。 export USE_MM_ALL_REDUCE_OP=1 关闭Matmul_all_reduce融合算子的命令: unset USE_MM_ALL_REDUCE_OP 配置后重启推理服务生效。 查看详细日志 查看详细耗时日志可以辅助定位性能瓶颈,但会影响推理性能。如需开启,配置以下环境变量。 export DETAIL_TIME_ LOG =1 export RAY_DEDUP_LOGS=0 关闭详细日志命令: unset DETAIL_TIME_LOG 配置后重启推理服务生效。
-
附录:基于vLLM(v0.3.2)不同模型推理支持的max-model-len长度说明 基于vLLM(v0.3.2)部署推理服务时,不同模型推理支持的max-model-len长度说明如下面的表格所示。如需达到以下值,需要将--gpu-memory-utilization设为0.9,qwen系列、qwen1.5系列、llama3系列模型还需打开词表切分配置export USE_VOCAB_PARALLEL=1。 序号 模型名称 4*64GB 8*32GB 1 qwen1.5-72b 24576 8192 2 qwen-72b 24576 8192 3 llama3-70b 32768 8192 4 llama2-70b 98304 32768 6 llama-65b 24576 8192 序号 模型名称 2*64GB 4*32GB 1 qwen1.5-32b 65536 24576 序号 模型名称 1*64GB 1*32GB 1 qwen1.5-7b 49152 16384 2 qwen-7b 49152 16384 3 llama3-8b 98304 32768 4 llama2-7b 126976 16384 5 chatglm3-6b 126976 65536 6 chatglm2-6b 126976 65536 序号 模型名称 1*64GB 2*32GB 1 qwen1.5-14b 24576 24576 2 qwen-14b 24576 24576 3 llama2-13b 24576 24576 说明:机器型号规格以卡数*显存大小为单位,如4*64GB代表4张64GB显存的NPU卡。
-
Step2 准备模型代码包和权重文件 将OBS中的模型权重和表1获取的AscendCloud-3rdLLM-6.3.905-xxx.zip代码包上传到Notebook的工作目录/home/ma-user/work/下。上传代码参考如下。 import moxing as mox obs_dir = "obs://${bucket_name}/${folder-name}" local_dir = "/home/ma-user/work/qwen-14b" mox.file.copy_parallel(obs_dir, local_dir) 实际操作如下图所示。 图1 上传OBS文件到Notebook的代码示例 构建推理代码。 解压AscendCloud-3rdLLM-6.3.905-xxx.zip代码包。 unzip AscendCloud-3rdLLM-6.3.905-*.zip 运行推理构建脚本build.sh文件,自动获取ascend_vllm_adapter文件夹中提供的vLLM相关算子代码。 cd llm_inference bash build.sh 运行完后,在当前目录下会生成ascend_vllm文件夹,即为昇腾适配后的vLLM代码。
-
离线推理 编辑一个python脚本,脚本内容如下,运行该脚本使用ascend-vllm进行模型离线推理。 from vllm import LLM, SamplingParams def main(): prompts = [ "Hello, my name is", "The president of the United States is", "The capital of France is", "The future of AI is", ] sampling_params = SamplingParams(temperature=0.8, top_p=0.95) model_path = "/path/to/model" llm = LLM(model=model_path, tensor_parallel_size=1, max_model_len=8192) outputs = llm.generate(prompts, sampling_params) # Print the outputs. for output in outputs: prompt = output.prompt generated_text = output.outputs[0].text print(f"Prompt: {prompt!r}, Generated text: {generated_text!r}") if __name__=="__main__": main()
-
ModelArts资源类型 管理员可以按ModelArts的资源类型选择授权范围。ModelArts支持的资源类型如下表: 表4 ModelArts资源类型(角色与策略授权) 资源类型 说明 notebook 开发环境的Notebook实例 exemlProject 自动学习项目 exemlProjectInf 自动学习项目的在线推理服务 exemlProjectTrain 自动学习项目的训练作业 exemlProjectVersion 自动学习项目的版本 workflow Workflow项目 pool 专属资源池 network 专属资源池网络连接 trainJob 训练作业 trainJobLog 训练作业的运行日志 trainJobInnerModel 系统预置模型 model 模型 service 在线服务 nodeservice 边缘服务 workspace 工作空间 dataset 数据集 dataAnnotation 数据集的标注信息 aiAlgorithm 训练算法 image 镜像 devserver 弹性节点Lite Server
-
角色与策略权限管理 ModelArts服务支持角色与策略授权。默认情况下,管理员创建的IAM用户没有任何权限,需要将其加入用户组,并给用户组授予策略或角色,才能使得用户组中的用户获得对应的权限,这一过程称为授权。授权后,用户就可以基于被授予的权限对云服务进行操作。 ModelArts部署时通过物理区域划分,为项目级服务。授权时,“授权范围”需要选择“指定区域项目资源”,然后在指定区域(如华北-北京1)对应的项目(cn-north-1)中设置相关权限,并且该权限仅对此项目生效;如果“授权范围”选择“所有资源”,则该权限在所有区域项目中都生效。访问ModelArts时,需要先切换至授权区域。 如表1所示,包括了ModelArts的所有系统策略权限。如果系统预置的ModelArts权限,不满足您的授权要求,可以创建自定义策略,可参考策略JSON格式字段介绍。 表1 ModelArts系统策略 策略名称 描述 类型 ModelArts FullAccess ModelArts管理员用户,拥有所有ModelArts服务的权限。 系统策略 ModelArts CommonOperations ModelArts操作用户,拥有所有ModelArts服务操作权限除了管理专属资源池的权限。 系统策略 ModelArts Dependency Access ModelArts服务的常用依赖服务的权限。 系统策略 ModelArts对其他云服务有依赖关系,因此在ModelArts控制台的各项功能需要配置相应的服务权限后才能正常查看或使用,依赖服务及其预置的权限如下。 表2 ModelArts控制台依赖服务的角色或策略 控制台功能 依赖服务 需配置角色/策略 数据管理(数据集/ 数据标注/数据处理) 对象存储服务OBS OBS Administrator 数据湖探索 DLI DLI FullAccess MapReduce服务 MRS MRS Administrator 数据仓库服务GaussDB(DWS) DWS Administrator 云审计 服务 CTS CTS Administrator AI开发平台 ModelArts ModelArts CommonOperations ModelArts Dependency Access 开发环境Notebook/镜像管理/弹性节点Server 对象存储服务OBS OBS Administrator 凭据管理服务C SMS CSMS ReadOnlyAccess 云审计服务CTS CTS Administrator 弹性 云服务器ECS ECS FullAccess 容器镜像服务SWR SWR Admin 弹性文件服务SFS SFS Turbo FullAccess 应用运维管理 服务 AOM AOM FullAccess 密钥管理服务KMS KMS CMKFullAccess AI开发平台ModelArts ModelArts CommonOperations ModelArts Dependency Access 算法管理/训练管理/Workflow/自动学习 对象存储服务OBS OBS Administrator 消息通知 服务 SMN SMN Administrator 云审计服务CTS CTS Administrator 企业项目管理服务EPS EPS FullAccess 弹性文件服务SFS SFS ReadOnlyAccess 容器镜像服务SWR SWR Admin 应用运维管理服务AOM AOM FullAccess 密钥管理服务KMS KMS CMKFullAccess 虚拟私有云服务VPC VPC FullAccess AI开发平台ModelArts ModelArts CommonOperations ModelArts Dependency Access 模型管理/在线服务/批量服务/边缘服务/边缘部署专属资源池 对象存储服务OBS OBS Administrator 云监控服务 CES CES ReadOnlyAccess 消息通知服务SMN SMN Administrator 企业项目管理服务EPS EPS FullAccess 云审计服务CTS CTS Administrator 云日志服务LTS LTS FullAccess 虚拟私有云VPC VPC FullAccess 容器镜像服务SWR SWR Admin AI开发平台ModelArts ModelArts CommonOperations ModelArts Dependency Access AI Gallery 对象存储服务OBS OBS Administrator 云审计服务CTS CTS Administrator 容器镜像服务SWR SWR Admin AI开发平台ModelArts ModelArts CommonOperations ModelArts Dependency Access 弹性集群Cluster(包含Standard资源池和Lite资源池) 云审计服务CTS CTS Administrator 云容器引擎CCE CCE Administrator 裸金属服务器BMS BMS FullAccess 镜像服务IMS IMS FullAccess 数据加密服务DEW DEW KeypairReadOnlyAccess 虚拟私有云VPC VPC FullAccess 弹性云服务器ECS ECS FullAccess 弹性文件服务SFS SFS Turbo FullAccess 对象存储服务OBS OBS Administrator 应用运维管理服务AOM AOM FullAccess 标签管理服务TMS TMS FullAccess AI开发平台ModelArts ModelArts CommonOperations ModelArts Dependency Access 费用中心 BSS Administrator 云硬盘EVS EVS FullAccess 如果系统预置的权限,不满足您的授权要求,可以创建自定义策略。自定义策略中可以添加的授权项(Action)请参考ModelArts资源权限项。 目前支持以下两种方式创建自定义策略: 可视化视图创建自定义策略:无需了解策略语法,按可视化视图导航栏选择云服务、操作、资源、条件等策略内容,可自动生成策略。 JSON视图创建自定义策略:可以在选择策略模板后,根据具体需求编辑策略内容;也可以直接在编辑框内编写JSON格式的策略内容。 具体创建步骤请参见:创建自定义策略。下面为您介绍常用的ModelArts自定义策略样例。 示例1:授权镜像管理的权限。 { "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "modelarts:image:register", "modelarts:image:listGroup" ] } ] } 示例2:拒绝用户创建、更新、删除专属资源池。 拒绝策略需要同时配合其他策略使用,否则没有实际作用。用户被授予的策略中,一个授权项的作用如果同时存在Allow和Deny,则遵循Deny优先原则。 { "Version": "1.1", "Statement": [ { "Action": [ "modelarts:*:*" ], "Effect": "Allow" }, { "Action": [ "swr:*:*" ], "Effect": "Allow" }, { "Action": [ "smn:*:*" ], "Effect": "Allow" }, { "Action": [ "modelarts:pool:create", "modelarts:pool:update", "modelarts:pool:delete" ], "Effect": "Deny" } ] } 示例3:多个授权项策略。 一个自定义策略中可以包含多个授权项,且除了可以包含本服务的授权项外,还可以包含其他服务的授权项,可以包含的其他服务必须跟本服务同属性,即都是项目级服务或都是全局级服务。多个授权语句策略描述如下: { "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "modelarts:service:*" ] }, { "Effect": "Allow", "Action": [ "lts:logs:list" ] } ] }
-
IAM权限简介 如果您需要为企业中的员工设置不同的权限访问ModelArts资源,以达到不同员工之间的权限隔离,您可以使用 统一身份认证 服务(Identity and Access Management,简称IAM)进行精细的权限管理。该服务提供用户身份认证、权限分配、访问控制等功能,可以帮助您安全的控制云服务资源的访问。如果华为账号已经能满足您的要求,不需要通过IAM对用户进行权限管理,您可以跳过本章节,不影响您使用ModelArts服务的其他功能。 IAM是提供权限管理的基础服务,无需付费即可使用,您只需要为您账号中的资源进行付费。 通过IAM,您可以通过授权控制用户对服务资源的访问范围。例如您的员工中有负责软件开发的人员,您希望这些用户拥有ModelArts的使用权限,但是不希望这些用户拥有删除ModelArts等高危操作的权限,那么您可以使用IAM进行权限分配,通过授予用户仅能使用ModelArts,但是不允许删除ModelArts的权限,控制用户对ModelArts资源的使用范围。 关于IAM的详细介绍,请参见IAM产品介绍。
-
多模态模型 ModelArts针对以下主流的多模态模型进行了基于昇腾NPU的适配工作,可以直接使用适配过的模型在NPU上进行推理或训练。 表4 多模态模型基于Ascend-vLLM框架的推理 支持模型 支持模型参数量 应用场景 软件技术栈 指导文档 internVL2 internVL2-8B internVL2-26B internVL2-40B internVL2-Llama3-76B 推理 Ascend-vLLM 主流开源大模型基于Lite Server适配Ascend-vLLM PyTorch NPU推理指导 主流开源大模型基于Standard适配PyTorch NPU推理指导(6.3.911) 主流开源大模型基于Lite Cluster适配PyTorch NPU推理指导(6.3.911) MiniCPM MiniCPM-v2.6 推理 Ascend-vLLM qwen2-vl qwen2-vl-2B qwen2-vl-7B qwen2-vl-72B 推理 Ascend-vLLM llava llava-1.5-7b llava-1.5-13b llava-v1.6-7b llava-v1.6-13b llava-v1.6-34b 推理 Ascend-vLLM llava-onevision-qwen2 llava-onevision-qwen2-0.5b-ov-hf llava-onevision-qwen2-7b-ov-hf 推理 Ascend-vLLM 表5 多模态模型基于PyTorch的训练推理 模型名称 应用场景 软件技术栈 指导文档 Qwen-VL 训练 推理 PyTorch Qwen-VL基于Standard+OBS+SFS适配PyTorch NPU训练指导(6.3.912) Qwen-VL模型基于Standard+OBS适配PyTorch NPU训练指导(6.3.912) Qwen-VL基于Lite Server适配PyTorch NPU的Finetune训练指导(6.3.912) Qwen-VL基于Lite Server适配PyTorch NPU的推理指导(6.3.909) MiniCPM-V2.6 训练 PyTorch MiniCPM-V2.6基于Lite Server适配PyTorch NPU训练指导(6.3.912) MiniCPM-V2.0 训练 推理 PyTorch MiniCPM-V2.0推理及LoRA微调基于Lite Server适配PyTorch NPU指导(6.3.910) InternVL2 训练 PyTorch InternVL2基于LIte Server适配PyTorch NPU训练指导(6.3.912) LLaVA-NeXT 训练 PyTorch LLaVA-NeXT基于Lite Server适配PyTorch NPU训练微调指导(6.3.912) LLaVA 训练 推理 PyTorch LLaVA模型基于Lite Server适配PyTorch NPU预训练指导(6.3.912) LLaVA模型基于Lite Server适配PyTorch NPU推理指导(6.3.906) LLama 3.2-Vision 训练 PyTorch Llama 3.2-Vision基于Lite Server适配Pytorch NPU训练微调指导(6.3.912) LLaMA-VID 推理 PyTorch LLaMA-VID基于Lite Server适配PyTorch NPU推理指导(6.3.910) moondream2 推理 PyTorch moondream2基于Lite Server适配PyTorch NPU推理指导
-
Step2 配置pod 在节点自定义目录${node_path}下创建config.yaml文件 apiVersion: apps/v1 kind: Deployment metadata: name: yourapp labels: app: infers spec: replicas: 1 selector: matchLabels: app: infers template: metadata: labels: app: infers spec: schedulerName: volcano nodeSelector: accelerator/huawei-npu: ascend-1980 containers: - image: ${image_name} # 推理镜像名称 imagePullPolicy: IfNotPresent name: ${container_name} securityContext: runAsUser: 0 ports: - containerPort: 8080 command: ["/bin/bash", "-c"] args: ["${node-path}/run_vllm.sh"] # 节点自定义目录,该目录下包含pod配置文件config.yaml和推理服务启动脚本run_vllm.sh resources: requests: huawei.com/ascend-1980: "8" # 需求卡数,key保持不变。 limits: huawei.com/ascend-1980: "8" # 限制卡数,key保持不变。 volumeMounts: # 容器内部映射路径 - name: ascend-driver #驱动挂载,保持不动 mountPath: /usr/local/Ascend/driver - name: ascend-add-ons #驱动挂载,保持不动 mountPath: /usr/local/Ascend/add-ons - name: hccn #驱动hccn配置,保持不动 mountPath: /etc/hccn.conf - name: localtime mountPath: /etc/localtime - name: npu-smi # npu-smi mountPath: /usr/local/sbin/npu-smi - name: model-path # 模型权重路径 mountPath: ${model-path} - name: node-path mountPath: ${node-path} volumes: # 物理机外部路径 - name: ascend-driver hostPath: path: /usr/local/Ascend/driver - name: ascend-add-ons hostPath: path: /usr/local/Ascend/add-ons - name: hccn hostPath: path: /etc/hccn.conf - name: localtime hostPath: path: /etc/localtime - name: npu-smi hostPath: path: /usr/local/sbin/npu-smi - name: model-path hostPath: path: ${model-path} - name: node-path hostPath: path: ${node-path} 参数说明: ${container_name}:容器名称,此处可以自己定义一个容器名称,例如ascend-vllm。 ${image_name}:Step3 制作推理镜像构建的推理镜像名称。 ${node-path}:节点自定义目录,该目录下包含pod配置文件config.yaml和推理服务启动脚本run_vllm.sh,run_vllm.sh内容见Step3 创建服务启动脚本。 ${model-path}:Step1 上传权重文件中上传的模型权重路径。
-
Step4 创建pod 在节点自定义目录${node_path}下执行如下命令创建pod。 kubectl apply -f config.yaml 检查pod启动情况,执行下述命令。如果显示“1/1 running”状态代表启动成功。 kubectl get pod -A 图1 启动pod成功 执行如下命令查看pod日志,如果打印类似下图信息表示服务启动成功。 kubectl logs -f ${pod_name} 参数说明: ${pod_name}:pod名,例如图1${pod_name}为yourapp-87d9b5b46-c46bk。 图2 启动服务成功
-
静态benchmark验证 本章节介绍如何进行静态benchmark验证。 已经上传benchmark验证脚本到推理容器中。如果在步骤三:上传代码包和权重文件中已经上传过AscendCloud-LLM-x.x.x.zip并解压,无需重复执行。 进入benchmark_tools目录下,运行静态benchmark验证。 cd benchmark_tools 多模态模型脚本相对路径是llm_tools/llm_evaluation/benchmark_tools/modal_benchmark/modal_benchmark_parallel.py,具体操作命令如下,可以根据参数说明修改参数。 python modal_benchmark_parallel.py \ --host ${docker_ip} \ --port ${port} \ --tokenizer /path/to/tokenizer \ --epochs 5 \ --parallel-num 1 4 8 16 32 \ --prompt-tokens 1024 2048 \ --output-tokens 128 256 \ --height ${height} \ --width ${width} \ --benchmark-csv benchmark_parallel.csv 参数说明 --host:服务部署的IP,${docker_ip}替换为宿主机实际的IP地址。 --port:推理服务端口。 --tokenizer:tokenizer路径,HuggingFace的权重路径。 --epochs:测试轮数,默认取值为5 --parallel-num:每轮并发数,支持多个,如 1 4 8 16 32。 --prompt-tokens:输入长度,支持多个,如 128 128 2048 2048,数量需和--output-tokens的数量对应。 --output-tokens:输出长度,支持多个,如 128 2048 128 2048,数量需和--prompt-tokens的数量对应。 --benchmark-csv:结果保存文件,如benchmark_parallel.csv。 --height: 图片长度(分辨率相关参数)。 --width: 图片宽度(分辨率相关参数)。 --served-model-name: 选择性添加,在接口中使用的模型名;如果没有配置,则默认为tokenizer。 脚本运行完成后,测试结果保存在benchmark_parallel.csv中。
-
离线推理 编辑一个python脚本,脚本内容如下,运行该脚本使用ascend-vllm进行模型离线推理。 from vllm import LLM, SamplingParams def main(): prompts = [ "Hello, my name is", "The president of the United States is", "The capital of France is", "The future of AI is", ] sampling_params = SamplingParams(temperature=0.8, top_p=0.95) model_path = "/path/to/model" llm = LLM(model=model_path, tensor_parallel_size=1, max_model_len=8192) outputs = llm.generate(prompts, sampling_params) # Print the outputs. for output in outputs: prompt = output.prompt generated_text = output.outputs[0].text print(f"Prompt: {prompt!r}, Generated text: {generated_text!r}") if __name__=="__main__": main()
-
Step2 准备权重文件 将OBS中的模型权重上传到Notebook的工作目录/home/ma-user/work/下。上传代码参考如下。 import moxing as mox obs_dir = "obs://${bucket_name}/${folder-name}" local_dir = "/home/ma-user/work/qwen-14b" mox.file.copy_parallel(obs_dir, local_dir) 实际操作如下图所示。 图1 上传OBS文件到Notebook的代码示例
-
Step3 启动推理服务 配置需要使用的NPU卡编号。例如:实际使用的是第1张卡,此处填写“0”。 export ASCEND_RT_VISIBLE_DEVICES=0 如果启动服务需要使用多张卡,例如:实际使用的是第1张和第2张卡,此处填写为“0,1”,以此类推。 export ASCEND_RT_VISIBLE_DEVICES=0,1 NPU卡编号可以通过命令npu-smi info查询。 配置环境变量。 export DEFER_DECODE=1 # 是否使用推理与Token解码并行;默认值为1表示开启并行,取值为0表示关闭并行。开启该功能会略微增加首Token时间,但可以提升推理吞吐量。 export DEFER_MS=10 # 延迟解码时间,默认值为10,单位为ms。将Token解码延迟进行的毫秒数,使得当次Token解码能与下一次模型推理并行计算,从而减少总推理时延。该参数需要设置环境变量DEFER_DECODE=1才能生效。 export USE_VOCAB_PARALLEL=1 # 是否使用词表并行;默认值为1表示开启并行,取值为0表示关闭并行。对于词表较小的模型(如llama2系模型),关闭并行可以减少推理时延,对于词表较大的模型(如qwen系模型),开启并行可以减少显存占用,以提升推理吞吐量。 export USE_PFA_HIGH_PRECISION_MODE=1 # PFA算子是否使用高精度模式;默认值为0表示不开启。针对Qwen2-7B模型,必须开启此配置,否则精度会异常;其他模型不建议开启,因为性能会有损失。 如果需要增加模型量化功能,启动推理服务前,先参考推理模型量化章节对模型做量化处理。 启动服务与请求。此处提供vLLM服务API接口启动和OpenAI服务API接口启动2种方式。详细启动服务与请求方式参考:https://docs.vllm.ai/en/latest/getting_started/quickstart.html。 以下服务启动介绍的是在线推理方式,离线推理请参见https://docs.vllm.ai/en/latest/getting_started/quickstart.html#offline-batched-inference。 通过vLLM服务API接口启动服务 在ascend_vllm目录下通过vLLM服务API接口启动服务,具体操作命令如下,API Server的命令相关参数说明如下,可以根据参数说明修改配置。 python -m vllm.entrypoints.api_server --model ${model_path} \ --max-num-seqs=256 \ --max-model-len=4096 \ --max-num-batched-tokens=4096 \ --dtype=float16 \ --tensor-parallel-size=1 \ --block-size=128 \ --host=${docker_ip} \ --port=8080 \ --gpu-memory-utilization=0.9 \ --trust-remote-code 通过OpenAI服务API接口启动服务 在ascend_vllm目录下通OpenAI服务API接口启动服务,具体操作命令如下,可以根据参数说明修改配置。 python -m vllm.entrypoints.openai.api_server --model ${model_path} \ --max-num-seqs=256 \ --max-model-len=4096 \ --max-num-batched-tokens=4096 \ --dtype=float16 \ --tensor-parallel-size=1 \ --block-size=128 \ --host=${docker_ip} \ --port=8080 \ --gpu-memory-utilization=0.9 \ --trust-remote-code 具体参数说明如下: --model ${model_path}:模型地址,模型格式是HuggingFace的目录格式。即Step2 准备权重文件上传的HuggingFace权重文件存放目录。如果使用了量化功能,则使用推理模型量化章节转换后的权重。 --max-num-seqs:最大同时处理的请求数,超过后拒绝访问。 --max-model-len:推理时最大输入+最大输出tokens数量,输入超过该数量会直接返回。max-model-len的值必须小于config.json文件中的"seq_length"的值,否则推理预测会报错。config.json存在模型对应的路径下,例如:/home/ma-user/work/chatglm3-6b/config.json。 --max-num-batched-tokens:prefill阶段,最多会使用多少token,必须大于或等于--max-model-len,推荐使用4096或8192。 --dtype:模型推理的数据类型。支持FP16和BF16数据类型推理。float16表示FP16,bfloat16表示BF16。 --tensor-parallel-size:模型并行数。取值需要和启动的NPU卡数保持一致,可以参考1。此处举例为1,表示使用单卡启动服务。 --block-size:PagedAttention的block大小,推荐设置为128。 --host=${docker_ip}:服务部署的IP,${docker_ip}替换为宿主机实际的IP地址。 --port:服务部署的端口。 --gpu-memory-utilization:NPU使用的显存比例,复用原vLLM的入参名称,默认为0.9。 --trust-remote-code:是否相信远程代码。 高阶参数说明: --enable-prefix-caching:如果prompt的公共前缀较长或者多轮对话场景下推荐使用prefix-caching特性。在推理服务启动脚本中添加此参数表示使用,不添加表示不使用。 --quantization:推理量化参数。当使用量化功能,则在推理服务启动脚本中增加该参数,若未使用量化功能,则无需配置。根据使用的量化方式配置,可选择awq或smoothquant方式。 --speculative-model ${container_draft_model_path}:投机草稿模型地址,模型格式是HuggingFace的目录格式。即Step2 准备权重文件上传的HuggingFace权重文件存放目录。投机草稿模型为与--model入参同系列,但是权重参数远小于--model指定的模型。若未使用投机推理功能,则无需配置。 --num-speculative-tokens:投机推理小模型每次推理的token数。若未使用投机推理功能,则无需配置。参数--num-speculative-tokens需要和--speculative-model ${container_draft_model_path}同时使用。 服务启动后,会打印如下类似信息。 server launch time cost: 15.443044185638428 s INFO: Started server process [2878] INFO: Waiting for application startup. INFO: Application startup complete. INFO: Uvicorn running on http://0.0.0.0:8080 (Press CTRL+C to quit)
共100000条
- 1
- ...
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 138
- 139
- 140
- 141
- 142
- 143
- 144
- 145
- 146
- 147
- 148
- 149
- 150
- 151
- 152
- 153
- 154
- 155
- 156
- 157
- 158
- 159
- 160
- 161
- 162
- 163
- 164
- 165
- 166
- 167
- 168
- 169
- 170
- 171
- 172
- 173
- 174
- 175
- 176
- 177
- 178
- 179
- 180
- 181
- 182
- 183
- 184
- 185
- 186
- 187
- 188
- 189
- 190
- 191
- 192
- 193
- 194
- 195
- 196
- 197
- 198
- 199
- 200
- 201
- 202
- 203
- 204
- 205
- 206
- 207
- 208
- 209
- 210
- 211
- 212
- 213
- 214
- 215
- ...
- 216
- 217
- 218
- 219
- 220
- 221
- 222
- 223
- 224
- 225
- 226
- 227
- 228
- 229
- 230
- 231
- 232
- 233
- 234
- 235
- 236
- 237
- 238
- 239
- 240
- 241
- 242
- 243
- 244
- 245
- 246
- 247
- 248
- 249
- 250
- 251
- 252
- 253
- 254
- 255
- 256
- 257
- 258
- 259
- 260
- 261
- 262
- 263
- 264
- 265
- 266
- 267
- 268
- 269
- 270
- 271
- 272
- 273
- 274
- 275
- 276
- 277
- 278
- 279
- 280
- 281
- 282
- 283
- 284
- 285
- 286
- 287
- 288
- 289
- 290
- 291
- 292
- 293
- 294
- 295
- 296
- 297
- 298
- 299
- 300
- 301
- 302
- 303
- 304
- 305
- 306
- 307
- 308
- 309
- 310
- 311
- 312
- 313
- 314
- 315
- 316
- 317
- 318
- 319
- 320
- 321
- 322
- 323
- 324
- 325
- 326
- 327
- 328
- 329
- 330
- 331
- 332
- 333
- 334
- 335
- 336
- 337
- 338
- 339
- 340
- 341
- 342
- 343
- 344
- 345
- 346
- 347
- 348
- 349
- 350
- 351
- 352
- 353
- 354
- 355
- 356
- 357
- 358
- 359
- 360
- 361
- 362
- 363
- 364
- 365
- 366
- 367
- 368
- 369
- 370
- 371
- 372
- 373
- 374
- 375
- 376
- 377
- 378
- 379
- 380
- 381
- 382
- 383
- 384
- 385
- 386
- 387
- 388
- 389
- 390
- 391
- 392
- 393
- 394
- 395
- 396
- 397
- 398
- 399
- 400
- 401
- 402
- 403
- 404
- 405
- 406
- 407
- 408
- 409
- 410
- 411
- 412
- 413
- 414
- 415
- 416
- 417
- 418
- 419
- 420
- 421
- 422
- 423
- 424
- 425
- 426
- 427
- 428
- 429
- 430
- 431
- 432
- 433
- 434
- 435
- 436
- 437
- 438
- 439
- 440
- 441
- 442
- 443
- 444
- 445
- 446
- 447
- 448
- 449
- 450
- 451
- 452
- 453
- 454
- 455
- 456
- 457
- 458
- 459
- 460
- 461
- 462
- 463
- 464
- 465
- 466
- 467
- 468
- 469
- 470
- 471
- 472
- 473
- 474
- 475
- 476
- 477
- 478
- 479
- 480
- 481
- 482
- 483
- 484
- 485
- 486
- 487
- 488
- 489
- 490
- 491
- 492
- 493
- 494
- 495
- 496
- 497
- 498
- 499
- 500
- 501
- 502
- 503
- 504
- 505
- 506
- 507
- 508
- 509
- 510
- 511
- 512
- 513
- 514
- 515
- 516
- 517
- 518
- 519
- 520
- 521
- 522
- 523
- 524
- 525
- 526
- 527
- 528
- 529
- 530
- 531
- 532
- 533
- 534
- 535
- 536
- 537
- 538
- 539
- 540
- 541
- 542
- 543
- 544
- 545
- 546
- 547
- 548
- 549
- 550
- 551
- 552
- 553
- 554
- 555
- 556
- 557
- 558
- 559
- 560
- 561
- 562
- 563
- 564
- 565
- 566
- 567
- 568
- 569
- 570
- 571
- 572
- 573
- 574
- 575
- 576
- 577
- 578
- 579
- 580
- 581
- 582
- 583
- 584
- 585
- 586
- 587
- 588
- 589
- 590
- 591
- 592
- 593
- 594
- 595
- 596
- 597
- 598
- 599
- 600
- 601
- 602
- 603
- 604
- 605
- 606
- 607
- 608
- 609
- 610
- 611
- 612
- 613
- 614
- 615
- 616
- 617
- 618
- 619
- 620
- 621
- 622
- 623
- 624
- 625
- 626
- 627
- 628
- 629
- 630
- 631
- 632
- 633
- 634
- 635
- 636
- 637
- 638
- 639
- 640
- 641
- 642
- 643
- 644
- 645
- 646
- 647
- 648
- 649
- 650
- 651
- 652
- 653
- 654
- 655
- 656
- 657
- 658
- 659
- 660
- 661
- 662
- 663
- 664
- 665
- 666
- 667
- 668
- 669
- 670
- 671
- 672
- 673
- 674
- 675
- 676
- 677
- 678
- 679
- 680
- 681
- 682
- 683
- 684
- 685
- 686
- 687
- 688
- 689
- 690
- 691
- 692
- 693
- 694
- 695
- 696
- 697
- 698
- 699
- 700
- 701
- 702
- 703
- 704
- 705
- 706
- 707
- 708
- 709
- 710
- 711
- 712
- 713
- 714
- 715
- 716
- 717
- 718
- 719
- 720
- 721
- 722
- 723
- 724
- 725
- 726
- 727
- 728
- 729
- 730
- 731
- 732
- 733
- 734
- 735
- 736
- 737
- 738
- 739
- 740
- 741
- 742
- 743
- 744
- 745
- 746
- 747
- 748
- 749
- 750
- 751
- 752
- 753
- 754
- 755
- 756
- 757
- 758
- 759
- 760
- 761
- 762
- 763
- 764
- 765
- 766
- 767
- 768
- 769
- 770
- 771
- 772
- 773
- 774
- 775
- 776
- 777
- 778
- 779
- 780
- 781
- 782
- 783
- 784
- 785
- 786
- 787
- 788
- 789
- 790
- 791
- 792
- 793
- 794
- 795
- 796
- 797
- 798
- 799
- 800
- 801
- 802
- 803
- 804
- 805
- 806
- 807
- 808
- 809
- 810
- 811
- 812
- 813
- 814
- 815
- 816
- 817
- 818
- 819
- 820
- 821
- 822
- 823
- 824
- 825
- 826
- 827
- 828
- 829
- 830
- 831
- 832
- 833
- 834
- 835
- 836
- 837
- 838
- 839
- 840
- 841
- 842
- 843
- 844
- 845
- 846
- 847
- 848
- 849
- 850
- 851
- 852
- 853
- 854
- 855
- 856
- 857
- 858
- 859
- 860
- 861
- 862
- 863
- 864
- 865
- 866
- 867
- 868
- 869
- 870
- 871
- 872
- 873
- 874
- 875
- 876
- 877
- 878
- 879
- 880
- 881
- 882
- 883
- 884
- 885
- 886
- 887
- 888
- 889
- 890
- 891
- 892
- 893
- 894
- 895
- 896
- 897
- 898
- 899
- 900
- 901
- 902
- 903
- 904
- 905
- 906
- 907
- 908
- 909
- 910
- 911
- 912
- 913
- 914
- 915
- 916
- 917
- 918
- 919
- 920
- 921
- 922
- 923
- 924
- 925
- 926
- 927
- 928
- 929
- 930
- 931
- 932
- 933
- 934
- 935
- 936
- 937
- 938
- 939
- 940
- 941
- 942
- 943
- 944
- 945
- 946
- 947
- 948
- 949
- 950
- 951
- 952
- 953
- 954
- 955
- 956
- 957
- 958
- 959
- 960
- 961
- 962
- 963
- 964
- 965
- 966
- 967
- 968
- 969
- 970
- 971
- 972
- 973
- 974
- 975
- 976
- 977
- 978
- 979
- 980
- 981
- 982
- 983
- 984
- 985
- 986
- 987
- 988
- 989
- 990
- 991
- 992
- 993
- 994
- 995
- 996
- 997
- 998
- 999
- 1000
- 1001
- 1002
- 1003
- 1004
- 1005
- 1006
- 1007
- 1008
- 1009
- 1010
- 1011
- 1012
- 1013
- 1014
- 1015
- 1016
- 1017
- 1018
- 1019
- 1020
- 1021
- 1022
- 1023
- 1024
- 1025
- 1026
- 1027
- 1028
- 1029
- 1030
- 1031
- 1032
- 1033
- 1034
- 1035
- 1036
- 1037
- 1038
- 1039
- 1040
- 1041
- 1042
- 1043
- 1044
- 1045
- 1046
- 1047
- 1048
- 1049
- 1050
- 1051
- 1052
- 1053
- 1054
- 1055
- 1056
- 1057
- 1058
- 1059
- 1060
- 1061
- 1062
- 1063
- 1064
- 1065
- 1066
- 1067
- 1068
- 1069
- 1070
- 1071
- 1072
- 1073
- 1074
- 1075
- 1076
- 1077
- 1078
- 1079
- 1080
- 1081
- 1082
- 1083
- 1084
- 1085
- 1086
- 1087
- 1088
- 1089
- 1090
- 1091
- 1092
- 1093
- 1094
- 1095
- 1096
- 1097
- 1098
- 1099
- 1100
- 1101
- 1102
- 1103
- 1104
- 1105
- 1106
- 1107
- 1108
- 1109
- 1110
- 1111
- 1112
- 1113
- 1114
- 1115
- 1116
- 1117
- 1118
- 1119
- 1120
- 1121
- 1122
- 1123
- 1124
- 1125
- 1126
- 1127
- 1128
- 1129
- 1130
- 1131
- 1132
- 1133
- 1134
- 1135
- 1136
- 1137
- 1138
- 1139
- 1140
- 1141
- 1142
- 1143
- 1144
- 1145
- 1146
- 1147
- 1148
- 1149
- 1150
- 1151
- 1152
- 1153
- 1154
- 1155
- 1156
- 1157
- 1158
- 1159
- 1160
- 1161
- 1162
- 1163
- 1164
- 1165
- 1166
- 1167
- 1168
- 1169
- 1170
- 1171
- 1172
- 1173
- 1174
- 1175
- 1176
- 1177
- 1178
- 1179
- 1180
- 1181
- 1182
- 1183
- 1184
- 1185
- 1186
- 1187
- 1188
- 1189
- 1190
- 1191
- 1192
- 1193
- 1194
- 1195
- 1196
- 1197
- 1198
- 1199
- 1200
- 1201
- 1202
- 1203
- 1204
- 1205
- 1206
- 1207
- 1208
- 1209
- 1210
- 1211
- 1212
- 1213
- 1214
- 1215
- 1216
- 1217
- 1218
- 1219
- 1220
- 1221
- 1222
- 1223
- 1224
- 1225
- 1226
- 1227
- 1228
- 1229
- 1230
- 1231
- 1232
- 1233
- 1234
- 1235
- 1236
- 1237
- 1238
- 1239
- 1240
- 1241
- 1242
- 1243
- 1244
- 1245
- 1246
- 1247
- 1248
- 1249
- 1250
- 1251
- 1252
- 1253
- 1254
- 1255
- 1256
- 1257
- 1258
- 1259
- 1260
- 1261
- 1262
- 1263
- 1264
- 1265
- 1266
- 1267
- 1268
- 1269
- 1270
- 1271
- 1272
- 1273
- 1274
- 1275
- 1276
- 1277
- 1278
- 1279
- 1280
- 1281
- 1282
- 1283
- 1284
- 1285
- 1286
- 1287
- 1288
- 1289
- 1290
- 1291
- 1292
- 1293
- 1294
- 1295
- 1296
- 1297
- 1298
- 1299
- 1300
- 1301
- 1302
- 1303
- 1304
- 1305
- 1306
- 1307
- 1308
- 1309
- 1310
- 1311
- 1312
- 1313
- 1314
- 1315
- 1316
- 1317
- 1318
- 1319
- 1320
- 1321
- 1322
- 1323
- 1324
- 1325
- 1326
- 1327
- 1328
- 1329
- 1330
- 1331
- 1332
- 1333
- 1334
- 1335
- 1336
- 1337
- 1338
- 1339
- 1340
- 1341
- 1342
- 1343
- 1344
- 1345
- 1346
- 1347
- 1348
- 1349
- 1350
- 1351
- 1352
- 1353
- 1354
- 1355
- 1356
- 1357
- 1358
- 1359
- 1360
- 1361
- 1362
- 1363
- 1364
- 1365
- 1366
- 1367
- 1368
- 1369
- 1370
- 1371
- 1372
- 1373
- 1374
- 1375
- 1376
- 1377
- 1378
- 1379
- 1380
- 1381
- 1382
- 1383
- 1384
- 1385
- 1386
- 1387
- 1388
- 1389
- 1390
- 1391
- 1392
- 1393
- 1394
- 1395
- 1396
- 1397
- 1398
- 1399
- 1400
- 1401
- 1402
- 1403
- 1404
- 1405
- 1406
- 1407
- 1408
- 1409
- 1410
- 1411
- 1412
- 1413
- 1414
- 1415
- 1416
- 1417
- 1418
- 1419
- 1420
- 1421
- 1422
- 1423
- 1424
- 1425
- 1426
- 1427
- 1428
- 1429
- 1430
- 1431
- 1432
- 1433
- 1434
- 1435
- 1436
- 1437
- 1438
- 1439
- 1440
- 1441
- 1442
- 1443
- 1444
- 1445
- 1446
- 1447
- 1448
- 1449
- 1450
- 1451
- 1452
- 1453
- 1454
- 1455
- 1456
- 1457
- 1458
- 1459
- 1460
- 1461
- 1462
- 1463
- 1464
- 1465
- 1466
- 1467
- 1468
- 1469
- 1470
- 1471
- 1472
- 1473
- 1474
- 1475
- 1476
- 1477
- 1478
- 1479
- 1480
- 1481
- 1482
- 1483
- 1484
- 1485
- 1486
- 1487
- 1488
- 1489
- 1490
- 1491
- 1492
- 1493
- 1494
- 1495
- 1496
- 1497
- 1498
- 1499
- 1500
- 1501
- 1502
- 1503
- 1504
- 1505
- 1506
- 1507
- 1508
- 1509
- 1510
- 1511
- 1512
- 1513
- 1514
- 1515
- 1516
- 1517
- 1518
- 1519
- 1520
- 1521
- 1522
- 1523
- 1524
- 1525
- 1526
- 1527
- 1528
- 1529
- 1530
- 1531
- 1532
- 1533
- 1534
- 1535
- 1536
- 1537
- 1538
- 1539
- 1540
- 1541
- 1542
- 1543
- 1544
- 1545
- 1546
- 1547
- 1548
- 1549
- 1550
- 1551
- 1552
- 1553
- 1554
- 1555
- 1556
- 1557
- 1558
- 1559
- 1560
- 1561
- 1562
- 1563
- 1564
- 1565
- 1566
- 1567
- 1568
- 1569
- 1570
- 1571
- 1572
- 1573
- 1574
- 1575
- 1576
- 1577
- 1578
- 1579
- 1580
- 1581
- 1582
- 1583
- 1584
- 1585
- 1586
- 1587
- 1588
- 1589
- 1590
- 1591
- 1592
- 1593
- 1594
- 1595
- 1596
- 1597
- 1598
- 1599
- 1600
- 1601
- 1602
- 1603
- 1604
- 1605
- 1606
- 1607
- 1608
- 1609
- 1610
- 1611
- 1612
- 1613
- 1614
- 1615
- 1616
- 1617
- 1618
- 1619
- 1620
- 1621
- 1622
- 1623
- 1624
- 1625
- 1626
- 1627
- 1628
- 1629
- 1630
- 1631
- 1632
- 1633
- 1634
- 1635
- 1636
- 1637
- 1638
- 1639
- 1640
- 1641
- 1642
- 1643
- 1644
- 1645
- 1646
- 1647
- 1648
- 1649
- 1650
- 1651
- 1652
- 1653
- 1654
- 1655
- 1656
- 1657
- 1658
- 1659
- 1660
- 1661
- 1662
- 1663
- 1664
- 1665
- 1666
- 1667
- 1668
- 1669
- 1670
- 1671
- 1672
- 1673
- 1674
- 1675
- 1676
- 1677
- 1678
- 1679
- 1680
- 1681
- 1682
- 1683
- 1684
- 1685
- 1686
- 1687
- 1688
- 1689
- 1690
- 1691
- 1692
- 1693
- 1694
- 1695
- 1696
- 1697
- 1698
- 1699
- 1700
- 1701
- 1702
- 1703
- 1704
- 1705
- 1706
- 1707
- 1708
- 1709
- 1710
- 1711
- 1712
- 1713
- 1714
- 1715
- 1716
- 1717
- 1718
- 1719
- 1720
- 1721
- 1722
- 1723
- 1724
- 1725
- 1726
- 1727
- 1728
- 1729
- 1730
- 1731
- 1732
- 1733
- 1734
- 1735
- 1736
- 1737
- 1738
- 1739
- 1740
- 1741
- 1742
- 1743
- 1744
- 1745
- 1746
- 1747
- 1748
- 1749
- 1750
- 1751
- 1752
- 1753
- 1754
- 1755
- 1756
- 1757
- 1758
- 1759
- 1760
- 1761
- 1762
- 1763
- 1764
- 1765
- 1766
- 1767
- 1768
- 1769
- 1770
- 1771
- 1772
- 1773
- 1774
- 1775
- 1776
- 1777
- 1778
- 1779
- 1780
- 1781
- 1782
- 1783
- 1784
- 1785
- 1786
- 1787
- 1788
- 1789
- 1790
- 1791
- 1792
- 1793
- 1794
- 1795
- 1796
- 1797
- 1798
- 1799
- 1800
- 1801
- 1802
- 1803
- 1804
- 1805
- 1806
- 1807
- 1808
- 1809
- 1810
- 1811
- 1812
- 1813
- 1814
- 1815
- 1816
- 1817
- 1818
- 1819
- 1820
- 1821
- 1822
- 1823
- 1824
- 1825
- 1826
- 1827
- 1828
- 1829
- 1830
- 1831
- 1832
- 1833
- 1834
- 1835
- 1836
- 1837
- 1838
- 1839
- 1840
- 1841
- 1842
- 1843
- 1844
- 1845
- 1846
- 1847
- 1848
- 1849
- 1850
- 1851
- 1852
- 1853
- 1854
- 1855
- 1856
- 1857
- 1858
- 1859
- 1860
- 1861
- 1862
- 1863
- 1864
- 1865
- 1866
- 1867
- 1868
- 1869
- 1870
- 1871
- 1872
- 1873
- 1874
- 1875
- 1876
- 1877
- 1878
- 1879
- 1880
- 1881
- 1882
- 1883
- 1884
- 1885
- 1886
- 1887
- 1888
- 1889
- 1890
- 1891
- 1892
- 1893
- 1894
- 1895
- 1896
- 1897
- 1898
- 1899
- 1900
- 1901
- 1902
- 1903
- 1904
- 1905
- 1906
- 1907
- 1908
- 1909
- 1910
- 1911
- 1912
- 1913
- 1914
- 1915
- 1916
- 1917
- 1918
- 1919
- 1920
- 1921
- 1922
- 1923
- 1924
- 1925
- 1926
- 1927
- 1928
- 1929
- 1930
- 1931
- 1932
- 1933
- 1934
- 1935
- 1936
- 1937
- 1938
- 1939
- 1940
- 1941
- 1942
- 1943
- 1944
- 1945
- 1946
- 1947
- 1948
- 1949
- 1950
- 1951
- 1952
- 1953
- 1954
- 1955
- 1956
- 1957
- 1958
- 1959
- 1960
- 1961
- 1962
- 1963
- 1964
- 1965
- 1966
- 1967
- 1968
- 1969
- 1970
- 1971
- 1972
- 1973
- 1974
- 1975
- 1976
- 1977
- 1978
- 1979
- 1980
- 1981
- 1982
- 1983
- 1984
- 1985
- 1986
- 1987
- 1988
- 1989
- 1990
- 1991
- 1992
- 1993
- 1994
- 1995
- 1996
- 1997
- 1998
- 1999
- 2000
- 2001
- 2002
- 2003
- 2004
- 2005
- 2006
- 2007
- 2008
- 2009
- 2010
- 2011
- 2012
- 2013
- 2014
- 2015
- 2016
- 2017
- 2018
- 2019
- 2020
- 2021
- 2022
- 2023
- 2024
- 2025
- 2026
- 2027
- 2028
- 2029
- 2030
- 2031
- 2032
- 2033
- 2034
- 2035
- 2036
- 2037
- 2038
- 2039
- 2040
- 2041
- 2042
- 2043
- 2044
- 2045
- 2046
- 2047
- 2048
- 2049
- 2050
- 2051
- 2052
- 2053
- 2054
- 2055
- 2056
- 2057
- 2058
- 2059
- 2060
- 2061
- 2062
- 2063
- 2064
- 2065
- 2066
- 2067
- 2068
- 2069
- 2070
- 2071
- 2072
- 2073
- 2074
- 2075
- 2076
- 2077
- 2078
- 2079
- 2080
- 2081
- 2082
- 2083
- 2084
- 2085
- 2086
- 2087
- 2088
- 2089
- 2090
- 2091
- 2092
- 2093
- 2094
- 2095
- 2096
- 2097
- 2098
- 2099
- 2100
- 2101
- 2102
- 2103
- 2104
- 2105
- 2106
- 2107
- 2108
- 2109
- 2110
- 2111
- 2112
- 2113
- 2114
- 2115
- 2116
- 2117
- 2118
- 2119
- 2120
- 2121
- 2122
- 2123
- 2124
- 2125
- 2126
- 2127
- 2128
- 2129
- 2130
- 2131
- 2132
- 2133
- 2134
- 2135
- 2136
- 2137
- 2138
- 2139
- 2140
- 2141
- 2142
- 2143
- 2144
- 2145
- 2146
- 2147
- 2148
- 2149
- 2150
- 2151
- 2152
- 2153
- 2154
- 2155
- 2156
- 2157
- 2158
- 2159
- 2160
- 2161
- 2162
- 2163
- 2164
- 2165
- 2166
- 2167
- 2168
- 2169
- 2170
- 2171
- 2172
- 2173
- 2174
- 2175
- 2176
- 2177
- 2178
- 2179
- 2180
- 2181
- 2182
- 2183
- 2184
- 2185
- 2186
- 2187
- 2188
- 2189
- 2190
- 2191
- 2192
- 2193
- 2194
- 2195
- 2196
- 2197
- 2198
- 2199
- 2200
- 2201
- 2202
- 2203
- 2204
- 2205
- 2206
- 2207
- 2208
- 2209
- 2210
- 2211
- 2212
- 2213
- 2214
- 2215
- 2216
- 2217
- 2218
- 2219
- 2220
- 2221
- 2222
- 2223
- 2224
- 2225
- 2226
- 2227
- 2228
- 2229
- 2230
- 2231
- 2232
- 2233
- 2234
- 2235
- 2236
- 2237
- 2238
- 2239
- 2240
- 2241
- 2242
- 2243
- 2244
- 2245
- 2246
- 2247
- 2248
- 2249
- 2250
- 2251
- 2252
- 2253
- 2254
- 2255
- 2256
- 2257
- 2258
- 2259
- 2260
- 2261
- 2262
- 2263
- 2264
- 2265
- 2266
- 2267
- 2268
- 2269
- 2270
- 2271
- 2272
- 2273
- 2274
- 2275
- 2276
- 2277
- 2278
- 2279
- 2280
- 2281
- 2282
- 2283
- 2284
- 2285
- 2286
- 2287
- 2288
- 2289
- 2290
- 2291
- 2292
- 2293
- 2294
- 2295
- 2296
- 2297
- 2298
- 2299
- 2300
- 2301
- 2302
- 2303
- 2304
- 2305
- 2306
- 2307
- 2308
- 2309
- 2310
- 2311
- 2312
- 2313
- 2314
- 2315
- 2316
- 2317
- 2318
- 2319
- 2320
- 2321
- 2322
- 2323
- 2324
- 2325
- 2326
- 2327
- 2328
- 2329
- 2330
- 2331
- 2332
- 2333
- 2334
- 2335
- 2336
- 2337
- 2338
- 2339
- 2340
- 2341
- 2342
- 2343
- 2344
- 2345
- 2346
- 2347
- 2348
- 2349
- 2350
- 2351
- 2352
- 2353
- 2354
- 2355
- 2356
- 2357
- 2358
- 2359
- 2360
- 2361
- 2362
- 2363
- 2364
- 2365
- 2366
- 2367
- 2368
- 2369
- 2370
- 2371
- 2372
- 2373
- 2374
- 2375
- 2376
- 2377
- 2378
- 2379
- 2380
- 2381
- 2382
- 2383
- 2384
- 2385
- 2386
- 2387
- 2388
- 2389
- 2390
- 2391
- 2392
- 2393
- 2394
- 2395
- 2396
- 2397
- 2398
- 2399
- 2400
- 2401
- 2402
- 2403
- 2404
- 2405
- 2406
- 2407
- 2408
- 2409
- 2410
- 2411
- 2412
- 2413
- 2414
- 2415
- 2416
- 2417
- 2418
- 2419
- 2420
- 2421
- 2422
- 2423
- 2424
- 2425
- 2426
- 2427
- 2428
- 2429
- 2430
- 2431
- 2432
- 2433
- 2434
- 2435
- 2436
- 2437
- 2438
- 2439
- 2440
- 2441
- 2442
- 2443
- 2444
- 2445
- 2446
- 2447
- 2448
- 2449
- 2450
- 2451
- 2452
- 2453
- 2454
- 2455
- 2456
- 2457
- 2458
- 2459
- 2460
- 2461
- 2462
- 2463
- 2464
- 2465
- 2466
- 2467
- 2468
- 2469
- 2470
- 2471
- 2472
- 2473
- 2474
- 2475
- 2476
- 2477
- 2478
- 2479
- 2480
- 2481
- 2482
- 2483
- 2484
- 2485
- 2486
- 2487
- 2488
- 2489
- 2490
- 2491
- 2492
- 2493
- 2494
- 2495
- 2496
- 2497
- 2498
- 2499
- 2500
- 2501
- 2502
- 2503
- 2504
- 2505
- 2506
- 2507
- 2508
- 2509
- 2510
- 2511
- 2512
- 2513
- 2514
- 2515
- 2516
- 2517
- 2518
- 2519
- 2520
- 2521
- 2522
- 2523
- 2524
- 2525
- 2526
- 2527
- 2528
- 2529
- 2530
- 2531
- 2532
- 2533
- 2534
- 2535
- 2536
- 2537
- 2538
- 2539
- 2540
- 2541
- 2542
- 2543
- 2544
- 2545
- 2546
- 2547
- 2548
- 2549
- 2550
- 2551
- 2552
- 2553
- 2554
- 2555
- 2556
- 2557
- 2558
- 2559
- 2560
- 2561
- 2562
- 2563
- 2564
- 2565
- 2566
- 2567
- 2568
- 2569
- 2570
- 2571
- 2572
- 2573
- 2574
- 2575
- 2576
- 2577
- 2578
- 2579
- 2580
- 2581
- 2582
- 2583
- 2584
- 2585
- 2586
- 2587
- 2588
- 2589
- 2590
- 2591
- 2592
- 2593
- 2594
- 2595
- 2596
- 2597
- 2598
- 2599
- 2600
- 2601
- 2602
- 2603
- 2604
- 2605
- 2606
- 2607
- 2608
- 2609
- 2610
- 2611
- 2612
- 2613
- 2614
- 2615
- 2616
- 2617
- 2618
- 2619
- 2620
- 2621
- 2622
- 2623
- 2624
- 2625
- 2626
- 2627
- 2628
- 2629
- 2630
- 2631
- 2632
- 2633
- 2634
- 2635
- 2636
- 2637
- 2638
- 2639
- 2640
- 2641
- 2642
- 2643
- 2644
- 2645
- 2646
- 2647
- 2648
- 2649
- 2650
- 2651
- 2652
- 2653
- 2654
- 2655
- 2656
- 2657
- 2658
- 2659
- 2660
- 2661
- 2662
- 2663
- 2664
- 2665
- 2666
- 2667
- 2668
- 2669
- 2670
- 2671
- 2672
- 2673
- 2674
- 2675
- 2676
- 2677
- 2678
- 2679
- 2680
- 2681
- 2682
- 2683
- 2684
- 2685
- 2686
- 2687
- 2688
- 2689
- 2690
- 2691
- 2692
- 2693
- 2694
- 2695
- 2696
- 2697
- 2698
- 2699
- 2700
- 2701
- 2702
- 2703
- 2704
- 2705
- 2706
- 2707
- 2708
- 2709
- 2710
- 2711
- 2712
- 2713
- 2714
- 2715
- 2716
- 2717
- 2718
- 2719
- 2720
- 2721
- 2722
- 2723
- 2724
- 2725
- 2726
- 2727
- 2728
- 2729
- 2730
- 2731
- 2732
- 2733
- 2734
- 2735
- 2736
- 2737
- 2738
- 2739
- 2740
- 2741
- 2742
- 2743
- 2744
- 2745
- 2746
- 2747
- 2748
- 2749
- 2750
- 2751
- 2752
- 2753
- 2754
- 2755
- 2756
- 2757
- 2758
- 2759
- 2760
- 2761
- 2762
- 2763
- 2764
- 2765
- 2766
- 2767
- 2768
- 2769
- 2770
- 2771
- 2772
- 2773
- 2774
- 2775
- 2776
- 2777
- 2778
- 2779
- 2780
- 2781
- 2782
- 2783
- 2784
- 2785
- 2786
- 2787
- 2788
- 2789
- 2790
- 2791
- 2792
- 2793
- 2794
- 2795
- 2796
- 2797
- 2798
- 2799
- 2800
- 2801
- 2802
- 2803
- 2804
- 2805
- 2806
- 2807
- 2808
- 2809
- 2810
- 2811
- 2812
- 2813
- 2814
- 2815
- 2816
- 2817
- 2818
- 2819
- 2820
- 2821
- 2822
- 2823
- 2824
- 2825
- 2826
- 2827
- 2828
- 2829
- 2830
- 2831
- 2832
- 2833
- 2834
- 2835
- 2836
- 2837
- 2838
- 2839
- 2840
- 2841
- 2842
- 2843
- 2844
- 2845
- 2846
- 2847
- 2848
- 2849
- 2850
- 2851
- 2852
- 2853
- 2854
- 2855
- 2856
- 2857
- 2858
- 2859
- 2860
- 2861
- 2862
- 2863
- 2864
- 2865
- 2866
- 2867
- 2868
- 2869
- 2870
- 2871
- 2872
- 2873
- 2874
- 2875
- 2876
- 2877
- 2878
- 2879
- 2880
- 2881
- 2882
- 2883
- 2884
- 2885
- 2886
- 2887
- 2888
- 2889
- 2890
- 2891
- 2892
- 2893
- 2894
- 2895
- 2896
- 2897
- 2898
- 2899
- 2900
- 2901
- 2902
- 2903
- 2904
- 2905
- 2906
- 2907
- 2908
- 2909
- 2910
- 2911
- 2912
- 2913
- 2914
- 2915
- 2916
- 2917
- 2918
- 2919
- 2920
- 2921
- 2922
- 2923
- 2924
- 2925
- 2926
- 2927
- 2928
- 2929
- 2930
- 2931
- 2932
- 2933
- 2934
- 2935
- 2936
- 2937
- 2938
- 2939
- 2940
- 2941
- 2942
- 2943
- 2944
- 2945
- 2946
- 2947
- 2948
- 2949
- 2950
- 2951
- 2952
- 2953
- 2954
- 2955
- 2956
- 2957
- 2958
- 2959
- 2960
- 2961
- 2962
- 2963
- 2964
- 2965
- 2966
- 2967
- 2968
- 2969
- 2970
- 2971
- 2972
- 2973
- 2974
- 2975
- 2976
- 2977
- 2978
- 2979
- 2980
- 2981
- 2982
- 2983
- 2984
- 2985
- 2986
- 2987
- 2988
- 2989
- 2990
- 2991
- 2992
- 2993
- 2994
- 2995
- 2996
- 2997
- 2998
- 2999
- 3000
- 3001
- 3002
- 3003
- 3004
- 3005
- 3006
- 3007
- 3008
- 3009
- 3010
- 3011
- 3012
- 3013
- 3014
- 3015
- 3016
- 3017
- 3018
- 3019
- 3020
- 3021
- 3022
- 3023
- 3024
- 3025
- 3026
- 3027
- 3028
- 3029
- 3030
- 3031
- 3032
- 3033
- 3034
- 3035
- 3036
- 3037
- 3038
- 3039
- 3040
- 3041
- 3042
- 3043
- 3044
- 3045
- 3046
- 3047
- 3048
- 3049
- 3050
- 3051
- 3052
- 3053
- 3054
- 3055
- 3056
- 3057
- 3058
- 3059
- 3060
- 3061
- 3062
- 3063
- 3064
- 3065
- 3066
- 3067
- 3068
- 3069
- 3070
- 3071
- 3072
- 3073
- 3074
- 3075
- 3076
- 3077
- 3078
- 3079
- 3080
- 3081
- 3082
- 3083
- 3084
- 3085
- 3086
- 3087
- 3088
- 3089
- 3090
- 3091
- 3092
- 3093
- 3094
- 3095
- 3096
- 3097
- 3098
- 3099
- 3100
- 3101
- 3102
- 3103
- 3104
- 3105
- 3106
- 3107
- 3108
- 3109
- 3110
- 3111
- 3112
- 3113
- 3114
- 3115
- 3116
- 3117
- 3118
- 3119
- 3120
- 3121
- 3122
- 3123
- 3124
- 3125
- 3126
- 3127
- 3128
- 3129
- 3130
- 3131
- 3132
- 3133
- 3134
- 3135
- 3136
- 3137
- 3138
- 3139
- 3140
- 3141
- 3142
- 3143
- 3144
- 3145
- 3146
- 3147
- 3148
- 3149
- 3150
- 3151
- 3152
- 3153
- 3154
- 3155
- 3156
- 3157
- 3158
- 3159
- 3160
- 3161
- 3162
- 3163
- 3164
- 3165
- 3166
- 3167
- 3168
- 3169
- 3170
- 3171
- 3172
- 3173
- 3174
- 3175
- 3176
- 3177
- 3178
- 3179
- 3180
- 3181
- 3182
- 3183
- 3184
- 3185
- 3186
- 3187
- 3188
- 3189
- 3190
- 3191
- 3192
- 3193
- 3194
- 3195
- 3196
- 3197
- 3198
- 3199
- 3200
- 3201
- 3202
- 3203
- 3204
- 3205
- 3206
- 3207
- 3208
- 3209
- 3210
- 3211
- 3212
- 3213
- 3214
- 3215
- 3216
- 3217
- 3218
- 3219
- 3220
- 3221
- 3222
- 3223
- 3224
- 3225
- 3226
- 3227
- 3228
- 3229
- 3230
- 3231
- 3232
- 3233
- 3234
- 3235
- 3236
- 3237
- 3238
- 3239
- 3240
- 3241
- 3242
- 3243
- 3244
- 3245
- 3246
- 3247
- 3248
- 3249
- 3250
- 3251
- 3252
- 3253
- 3254
- 3255
- 3256
- 3257
- 3258
- 3259
- 3260
- 3261
- 3262
- 3263
- 3264
- 3265
- 3266
- 3267
- 3268
- 3269
- 3270
- 3271
- 3272
- 3273
- 3274
- 3275
- 3276
- 3277
- 3278
- 3279
- 3280
- 3281
- 3282
- 3283
- 3284
- 3285
- 3286
- 3287
- 3288
- 3289
- 3290
- 3291
- 3292
- 3293
- 3294
- 3295
- 3296
- 3297
- 3298
- 3299
- 3300
- 3301
- 3302
- 3303
- 3304
- 3305
- 3306
- 3307
- 3308
- 3309
- 3310
- 3311
- 3312
- 3313
- 3314
- 3315
- 3316
- 3317
- 3318
- 3319
- 3320
- 3321
- 3322
- 3323
- 3324
- 3325
- 3326
- 3327
- 3328
- 3329
- 3330
- 3331
- 3332
- 3333
- 3333