阿里云函数低成本搭建AIGC

高效免运维;弹性高可用;高性能低成本。使云函数很适合弹性应用。

资费

配置 8 核 32G,GPU 16G,按分钟计费计费公式(单价 * 配置) * 时间

  • GPU 单价 0.00011元/GB*秒 分钟价格 (0.00011 * 16)*60= 0.1056
  • vCPU 单价 0.000127元/vCPU*秒 分钟价格 (0.000127 * 8)*60= 0.06096元
  • 内存 单价 0.0000127元/GB*秒 分钟价格 (0.0000127 * 32)*60= 0.024384元
  • 磁盘 单价 0.00000175元/GB*秒 分钟价格 (0.00000175 * 10)*60= 0.00105元
  • 调用次数 单价 0.009元/万次 按100万次,价格 0.9 元
  • 公网出流量 单价 0.50元/GB 按10G,价格 5 块

GPU比较贵。这里我们要好钢用到刀刃上,只在出图使用GPU。

参考 https://help.aliyun.com/zh/fc/product-overview/billing-overview

模型存储 NAS

  • 这里我们按20G存储预估,这不是NAS的限制,是本人钱包的限制

容量型:0.35元/GB/月 0.35 * 20 = 7元

性能型: 1.85元/GB/月 1.85 * 20 = 37元

如何低成本,减少 GPU 浪费,使用容量NAS

当然能白嫖就更好了。这里我们选择白嫖

https://help.aliyun.com/zh/fc/product-overview/notice-of-package-quota-change

新客户试用套餐
首次开通函数计算服务,可0元享免费试用额度,有效期3个月,总价值180元。免费试用额度限购一次,内含四个试用包,包括100万GB*秒GPU使用量、50万vCPU*秒vCPU使用量、200万GB*秒内存使用量、800万次函数调用。
老客户专享套餐
为答谢老用户(2023年04月06日20:00之前开通函数计算的用户)对函数计算产品的关爱,所有老用户可9.9元享老客户专享套餐,有效期3个月,总价值180元。专享套餐限购一次,内含四个试用包,包括100万GB*秒GPU使用量、50万vCPU*秒vCPU使用量、200万GB*秒内存使用量、800万次函数调用。

搭建应用

  • 1、登录阿里云官网,搜索云函数
  • 2、应用——> 创建应用 ——> 通过模板——>人工智能——> AI数字绘画stable-diffusion自定义模型版

如果懒,我们可以直接点击模板

https://fcnext.console.aliyun.com/applications/create?template=fc-stable-diffusion-plus

注意事项

  • 没授权的授权,授权之后点下一步。

成本优化

找到我们的应用

应用名称——> 环境名称——>环境详情:云端开发:流水线管理——>云端开发——>激活云端开发

找到 s.yaml 这里就是我们的配置文件

1、配置无 GPU 的 sdwebui

  • 1、复制出来一个 display 函数
  stable-diffusion-display:
    component: fc
    actions:
      post-deploy:
        - component: fc ondemand put --qualifier LATEST --max 1
    props:
      region: ${vars.region}
      service: ${vars.service}
      function:
        name: ${vars.functionName}_display
        handler: index.handler
        timeout: 600
        diskSize: 512
        caPort: 7860
        # instanceType: fc.gpu.tesla.1
        runtime: custom-container
        cpu: 8
        customContainerConfig:
          args: ''
          accelerationType: Default
          image: ${vars.imageUrl}
          accelerationInfo:
            status: Preparing
          command: ''
          webServerMode: true
        instanceConcurrency: 100
        memorySize: 32768
        # gpuMemorySize: 16384
        asyncConfiguration: {}
        environmentVariables:
          EXTRA_ARGS: ${vars.extraArgs}
      triggers:
        - name: defaultTrigger
          description: ''
          type: http
          qualifier: LATEST
          config:
            methods:
              - GET
              - POST
              - PUT
              - DELETE
            authType: anonymous
            disableURLInternet: false
      customDomains:
        - domainName: auto
          protocol: HTTP
          routeConfigs:
            - path: /*
  • 2、修改 filemgr 函数
  filemgr:
    component: fc
    actions:
      post-deploy:
        - component: fc ondemand put --qualifier LATEST --max 1
    props:
      region: ${vars.region}
      service: ${vars.service}
      function:
        name: "admin"
        description: 'FC 文件管理器'
        codeUri: './code/filemgr'
        runtime: custom
        timeout: 7200
        memorySize: 3072
        cpu: 2.0
        diskSize: 512
        instanceConcurrency: 16
        caPort: 9000
        customRuntimeConfig:
          command:
            - ./server
        environmentVariables:
          TOKEN: ${vars.filemgrToken}
          SD_VERSION: ""
          SD_FUNCTION_NAME: ${stable-diffusion-display.props.function.name}
          SD_DOMAIN: ${stable-diffusion-display.output.url.custom_domain[0].domain}
        layers:
          - "acs:fc:${vars.region}:official:layers/ServerlessDevs/versions/1"
      triggers:
        - name: httpTrigger
          type: http
          config:
            authType: anonymous
            methods:
              - GET
              - POST
              - PUT
              - DELETE
              - HEAD
              - OPTIONS
      customDomains:
        - domainName: auto
          protocol: HTTP
          routeConfigs:
            - path: /*
  • 3、按旧有流程进行配置和调试
  • 4、使用 display 函数进行出图

2、使用 容量型 NAS

  • 1、创建一个新的容量型 NAS
  • 2、复制性能型 NAS的标签、到容量型NAS。
  • 3、重新部署

3、创建文件管理器 Cloudreve

1、首先创建文件夹

mkdir code/cloudreve && cd code/cloudreve

2、创建启动脚本

touch scf_bootstrap && chmod +x scf_bootstrap
cat > scf_bootstrap<<EOF
#!/usr/bin/env bash
# export LD_LIBRARY_PATH=/opt/go/usr/lib:${LD_LIBRARY_PATH}
# 判断文件夹是否存在,不存在创建
if [ ! -d "/mnt/auto/cloudreve/" ];then
    # 如果不存在在根目录下的output下新建canbus文件夹
    mkdir -p /mnt/auto/cloudreve/
else
    echo "/mnt/auto/cloudreve/已经存在"
fi
# 启动应用
./cloudreve -c /code/conf.ini
EOF

3、下载二进制文件,并创建配置文件

  • 下载二进制文件
wget 'https://github.com/cloudreve/Cloudreve/releases/download/3.8.2/cloudreve_3.8.2_linux_amd64.tar.gz' \
     -U "Mozilla/5.0 Chrome/70.0.3538.110 Safari/537.36" \
     -O "cloudreve_3.8.2_linux_amd64.tar.gz"

#解压获取到的主程序
tar -zxvf cloudreve_3.8.2_linux_amd64.tar.gz
# 删除压缩文件
rm -rf cloudreve_3.8.2_linux_amd64.tar.gz

如果下载不下来使用这个链接:

wget 'https://ghproxy.com/https://github.com/cloudreve/Cloudreve/releases/download/3.8.2/cloudreve_3.8.2_linux_amd64.tar.gz' \
     -U "Mozilla/5.0 Chrome/70.0.3538.110 Safari/537.36" \
     -O "cloudreve_3.8.2_linux_amd64.tar.gz"
  • 创建配置文件
cat > conf.ini<<EOF
[System]
; 监听端口
Listen = :9000
[Database]
; SQLite 数据库文件路径
DBFile = /mnt/auto/cloudreve/cloudreve.db
EOF

4、修改 s.yaml 文件,创建函数

  fc-cloudreve: #  服务名称
    component: fc  # 组件名称
    props: #  组件的属性值
      region: ${vars.region} # 关于变量的使用方法,可以参考:https://www.serverless-devs.com/serverless-devs/yaml#变量赋值
      service: ${vars.service}
      function:
        name: cloudreve # 函数名
        description: 这是一个 Cloudreve 案例
        cAPort: 9000
        timeout: 30
        memorySize: 128
        cpu: 0.1
        diskSize: 512
        instanceConcurrency: 12
        runtime: custom.debian10
        codeUri: ./code/cloudreve
        handler: index.handler
        customRuntimeConfig:
          command:
            - ./scf_bootstrap
      triggers:
        - name: httpTrigger
          type: http
          config:
            authType: anonymous
            methods:
              - GET
              - POST
      customDomains:
        - domainName: auto
          protocol: HTTP
          routeConfigs:
            - path: /*

https://docs.cloudreve.org/getting-started/install

默认账户密码

账号: admin@cloudreve.org

密码: admin

初始状态没有文件,我们可以在个人设置导入文件夹来导入。访问路径 admin/file

常见问题

可以在 阿里函数计算钉钉群提问

END