Oferta por tempo limitado- 50% DE DESCONTO ANUALResgatar
23 de jul. de 2026Pesquisa

Como Tornamos Nossa API de Text-to-Speech Gratuita: A Engenharia de Inferência por Trás do S2.1 Pro

Como Tornamos Nossa API de Text-to-Speech Gratuita: A Engenharia de Inferência por Trás do S2.1 Pro

TL;DR

  • O Fish Audio S2.1 Pro agora está disponível como uma API de text-to-speech gratuita: 83 idiomas, sem limite rígido de uso, string do modelo s2.1-pro-free. O acesso gratuito está disponível por um período inicial; comunicaremos quaisquer mudanças com aviso prévio. Para mais informações, veja aqui.
  • A otimização de inferência de ponta a ponta reduziu a capacidade de solicitação por GPU em 4×: a mesma carga de trabalho que antes exigia quatro H200s agora roda em uma.
  • Alavancas principais: kernels CUDA personalizados (2,1–4,3× sobre cuBLAS em formatos de decodificação), loteamento contínuo (escalonamento de throughput de 52× c=1→64), utilização de GPU elevada de ~50% para ~90%+.
  • O mesmo stack alimenta nossa API de clonagem de voz — mesmos pesos de modelo, mesma infraestrutura, nível gratuito incluído. O S2.1 Pro baseia-se no Fish Speech, nosso modelo fundamental de pesos abertos.
  • A biblioteca de kernels principais fish-scales-ops é de código aberto.

Veja por que os desenvolvedores estão mudando de outras plataformas → Comece a construir gratuitamente

Julho de 2026 | Fish Audio reconstruiu o stack de inferência e tornou o S2.1 Pro gratuito para todos os desenvolvedores


A Real Razão Pela Qual a IA de Voz Custa Dinheiro

A inferência de IA de voz tem um problema estrutural que as páginas de preços não explicam: a decodificação autorregressiva é hostil à utilização de GPU por padrão.

Cada chamada de API de TTS aciona um loop de decodificação que gera tokens de áudio um passo de cada vez. Cada passo é uma pequena multiplicação de matriz — M ≤ 128 na prática — seguida por uma leitura de memória do cache KV para aquela sequência. Os núcleos CUDA ficam majoritariamente ociosos enquanto o subsistema de memória tenta acompanhar. Em uma H200 de US$ 30.000, você está pagando por computação e desperdiçando-a em gargalos de memória.

Em baixa concorrência, isso piora. Um loop de decodificação de solicitação única ocupa a GPU em rajadas de 10–20μs separadas por sobrecarga de agendamento. A utilização da GPU em um endpoint de TTS servido de forma ingênua em c=1 pode ficar abaixo de 10%. O hardware está presente; o trabalho não o está preenchendo.

Linha do tempo mostrando que uma única solicitação de TTS mantém a GPU ocupada apenas ~10% do tempo, com longos intervalos de gargalo de memória entre cada etapa de geração de token

A resposta da indústria tem sido repassar o custo aos desenvolvedores por meio de preços por caractere. Nossa resposta foi corrigir o problema de utilização na camada de infraestrutura. Quando uma única GPU pode fazer o trabalho que antes exigia quatro, a economia de um nível gratuito torna-se viável.

Eis o que isso exigiu.


Otimização de Ponta a Ponta: O Full Stack

Um stack de otimização de cinco camadas, do serviço à infraestrutura, mostrando o ganho de eficiência em cada camada: throughput de 52×, aceleração de kernel de 2,1–4,3×, utilização de GPU de ~50% para ~90%+, sem margem de lucro de nuvem, custo de egresso removido

Nenhuma mudança isolada proporciona uma melhoria de eficiência de 4×. Os ganhos vieram da otimização de todas as camadas simultaneamente e permitindo que elas se potencializassem:

  • Kernels CUDA personalizados — eliminando o desperdício de computação por token
  • Quantização FP8 — reduzindo a pressão da largura de banda de memória pela metade
  • Loteamento contínuo — preenchendo a GPU em solicitações concorrentes
  • Agendamento de GPU — eliminando a capacidade ociosa entre cargas de trabalho
  • Rede e armazenamento próprios — removendo a margem de lucro da infraestrutura em nuvem

Cada camada é descrita abaixo. Os números de throughput e custo ao final são o produto de todas elas juntas.


Kernels CUDA Personalizados: fish-scales-ops

Por Que o cuBLAS Não Foi Suficiente

Os formatos de decodificação no serviço de TTS (M ≤ 128) não são os formatos para os quais o cuBLAS, os kernels GEMM do PyTorch ou até mesmo o torch.compile são otimizados. Essas bibliotecas visam o treinamento e o pré-preenchimento (prefill) de grandes lotes — M na casa dos milhares. Com M pequeno, elas subutilizam a largura de banda de memória e perdem oportunidades de fusão que só existem em tamanhos de lote de decodificação.

A lacuna específica: para um forward de MLP SwiGLU em M=1 (decodificação de solicitação única), o scaled_mm do cuBLAS emite três lançamentos de kernel separados — ativação, multiplicação de gate, projeção descendente — com resultados intermediários escritos e lidos de volta da HBM entre cada um. Em M=1, esse ciclo de ida e volta é o gargalo, não a computação.

Construímos a fish-scales-ops para fechar essa lacuna: uma biblioteca de GEMM FP8 e FlashAttention de nível de produção visando as arquiteturas NVIDIA Hopper (H200, sm_90a) e Blackwell (sm_120a), de código aberto.

Estratégia de Quantização FP8

Implementamos dois esquemas de quantização para diferentes gerações de hardware:

bsgemm (FP8 com escala de bloco 128×128) para H200/Hopper. A escala de bloco em granularidade de 128×128 oferece boa estabilidade numérica sem o risco de precisão da quantização por tensor.

mxfp8 (1×32, formato OCP UE8M0) para Blackwell (RTX 5090, RTX 6000 PRO). A micro-escala com expoentes compartilhados de 32 elementos — o padrão OCP MX — oferece fidelidade numérica mais granular nas escalas que importam para a geração de tokens de áudio.

Um bug não óbvio no caminho mxfp8 exigiu depuração significativa: o quantize_blockscale.py materializava tensores weight_scale com .contiguous() para compatibilidade com safetensors, mas o linear_mxfp8_raw lê escalas com stride K-major (1, N). Carregar um [N, K/128] contíguo row-major fazia com que cada GEMM produzisse logits incorretos em velocidade total de kernel — o modo de amostragem posterior colapsava para um único token semântico repetido, o que parece um problema de qualidade do modelo, mas é na verdade um bug de layout de memória. A correção foi o re-striding em MXFP8LinearMethod.process_weights_after_loading. Após a correção, a decodificação gananciosa coincide exatamente com os tokens bf16 nos primeiros cinco frames de áudio.

Resultados de Benchmark de Kernel

Gráfico de barras comparando fish-scales-ops MXFP8 versus cuBLAS e torch.compile em tamanhos de lote de decodificação M=1, 4, 16, 64. fish-scales-ops é 6,2× mais rápido que cuBLAS em M=1, convergindo para 1,7× em M=64

Em formatos de decodificação (M ≤ 128), benchmarks internos em hardware equivalente — metodologia completa no repositório fish-scales-ops:

  • O caminho MXFP8 supera o torch.nn.functional.scaled_mm em 8 de 10 formatos quadrados de 1024³ a 16384³, até +21%
  • Forward de MLP SwiGLU Qwen3-4B de ponta a ponta: 1,7–6,2× sobre cuBLAS puro scaled_mm em cada M de 1 a 4096
  • Contra cuBLAS fundido por torch.compile em formatos de decodificação: 2,1–4,3× mais rápido
  • MXFP8 FlashAttention em sm_120a: 7–19× sobre a decodificação SDPA do PyTorch, 1,2–2,7× sobre o FlashInfer BF16

Os dois kernels fundidos que geram a maior parte do ganho: um funde a quantização de ativação + pack de escala UE8M0 em um único lançamento; o outro funde o prólogo SwiGLU diretamente na quantização de ativação do down-GEMM, eliminando uma escrita+leitura intermediária BF16 completa que o PyTorch, de outra forma, materializa entre as duas operações.


Arquitetura de Inferência em Lote: O Equilíbrio entre Latência e Throughput

Loteamento Contínuo para TTS Autorregressivo

A eficiência do kernel melhora o custo por token. O loteamento é o que converte a eficiência por token em utilização de GPU em todo o fluxo de solicitações.

Loteamento estático — preencher todas as sequências para o mesmo comprimento, rodando como um lote fixo — desperdiça computação em preenchimento (padding) e bloqueia novas solicitações até que a sequência mais lenta do lote termine. Para TTS com comprimentos de saída variáveis, a penalidade de latência de cauda é significativa.

Usamos loteamento contínuo (continuous batching) adaptado do sglang: novas solicitações entram no lote de decodificação ativo à medida que as vagas são liberadas, sem esperar por uma fronteira de lote. O loop de decodificação da GPU nunca para por uma solicitação lenta atípica.

DualAR: Restrições de Loteamento Específicas do S2

A arquitetura DualAR do S2.1 Pro gera tokens de áudio em dois estágios — codebooks grosseiros seguidos por codebooks finos — com uma janela deslizante de previous_tokens que condiciona cada passo. Isso cria uma restrição de correção que o loteamento de LLM padrão não possui: o kernel prev_tokens_shift_inplace exige um contrato estrito de formato/tipo (prev int32 [bs, W, cw], next_tokens int32 [bs, cw]). Qualquer ajuste de formato no chamador — .unsqueeze(), promoção implícita de dtype — corrompe a janela e produz áudio degradado que é difícil de distinguir de uma regressão de qualidade do modelo.

Para cargas de trabalho de clonagem de voz, essa restrição é especialmente importante: o condicionamento do falante flui pelo mesmo caminho de decodificação, e a corrupção da janela se manifesta como deriva da identidade do falante em saídas longas, em vez de artefatos de áudio óbvios.

Resultados de Throughput

H200, bsgemm FP8, varredura de concorrência:

ConcorrênciaThroughput AgregadoTTFB p50
1154 tok/s73,2 ms
4595 tok/s75,5 ms
81.206 tok/s81,2 ms
162.373 tok/s79,6 ms
324.099 tok/s96,9 ms
648.006 tok/s109,8 ms

Gráfico de eixo duplo mostrando o escalonamento do throughput agregado de 154 tok/s na concorrência 1 para 19.517 tok/s na concorrência 512, enquanto o TTFB p50 sobe gradualmente de 73ms para 525ms

O throughput escala ~52× de c=1 para c=64, enquanto o TTFB aumenta em 36,6ms — de 73ms para 110ms. A GPU faz 52 vezes o trabalho por uma penalidade de latência que é imperceptível na maioria das cargas de trabalho de produção.

Em c=64, uma única H200 sustenta 8.006 tok/s. Esse número é o mecanismo direto por trás do nível gratuito: mais throughput por GPU significa menor custo por solicitação.

Estes são os números rodando por trás de cada chamada de API gratuita. Comece a construir →

Modo Real-Time: Abordagem Arquitetural para Cargas de Baixa Latência

Para agentes de voz e aplicações de conversação, expomos um endpoint de tempo real separado, otimizado para o tempo até o primeiro áudio (TTFA), em vez do throughput agregado.

A decisão arquitetural central: o pré-preenchimento ocorre na abertura da conexão, totalmente fora do caminho crítico de latência. O cronômetro para a latência de streaming começa no envio do primeiro fragmento de áudio, não no estabelecimento da conexão. Isso significa que o custo do pré-preenchimento, que escala com o comprimento do prompt, não aparece de forma alguma no número de TTFA.

No nível do agendador, um design ping-pong executa a decodificação e o pré-preenchimento em threads separadas sem barreira de host por ciclo. A remoção da barreira é a principal melhoria de TTFA em c≥4: em uma implementação ingênua, a sincronização do lado do host após cada etapa de decodificação serializa o que deveria ser trabalho concorrente. O loop de decodificação em pipeline e as transferências de memória H2D fixas abordam o TTFB e o jitter em alta concorrência.

O design completo e o detalhamento da latência estão em arXiv:2603.08823.


Validação de Qualidade: Como Verificamos se a Otimização Não Degradou o Áudio

Fluxograma mostrando que cada mudança no stack de inferência deve passar por um portão de correção (correspondência exata de tokens vs bf16 nos primeiros 5 frames) e um portão de desempenho (decode_tps dentro de 5% em c=1, 16, 64) antes da implantação na produção

A quantização e o loteamento podem introduzir regressões de qualidade difíceis de detectar apenas com benchmarks de throughput — a GPU roda em velocidade total produzindo resultados incorretos.

Detectamos um caso disso durante o desenvolvimento do mxfp8: o bug de layout de peso descrito acima produziu ~53% de erro relativo de logit enquanto a latência do kernel estava completamente normal. A regressão só apareceu na análise de tokens de saída, não em nenhuma métrica de desempenho.

Nosso pipeline de validação possui dois portões:

Portão de correção: A decodificação gananciosa pós-quantização deve coincidir exatamente com os tokens bf16 nos primeiros cinco frames de áudio para uma entrada de referência fixa. A correspondência exata de tokens nos primeiros frames detecta a corrupção sistemática de logits — se o modelo quantizado produzir distribuições de probabilidade diferentes, ele divergirá do bf16 imediatamente em entradas determinísticas.

Portão de regressão de desempenho: O decode_tps por solicitação deve permanecer dentro de 5% dos números de referência congelados em cada ponto de concorrência. Qualquer alteração que degrade o throughput além de 5% em qualquer concorrência — c=1, c=16, c=64 — requer justificativa explícita antes da fusão (merge). Este portão protege contra correções de erro que silenciosamente adicionam sincronização ao loop de decodificação.

Ambos os portões rodam em cada mudança no stack de inferência. O resultado: os pesos do modelo S2.1 Pro Free são idênticos aos do nível pago, e o caminho de serviço quantizado é validado contra a linha de base não quantizada em cada implantação.


Clonagem de Voz em Escala: Por Que a Eficiência de Inferência Importa

Diagrama lado a lado comparando TTS padrão (entrada de texto → modelo S2.1 Pro → saída de áudio) e clonagem de voz (entrada de texto mais amostra de áudio de referência → modelo S2.1 Pro com condicionamento de falante → saída de voz clonada)

A clonagem de voz do Fish Audio sempre foi gratuita — e continua sendo, em nossa própria avaliação e no feedback dos desenvolvedores, a mais forte em sua categoria. A consistência do falante em 83 idiomas, a prosódia natural e o desempenho estável em sotaques não são recursos que adicionamos a um nível pago. Eles são a base. O S2.1 Pro baseia-se no Fish Speech S2 Pro, nosso modelo fundamental de pesos abertos lançado no início deste ano.

O que a otimização de inferência muda é a economia de manter esse compromisso em escala. As cargas de trabalho de clonagem de voz carregam um custo por solicitação mais alto do que o TTS padrão: cada chamada deve se condicionar a um embedding de falante de referência, manter a identidade do falante em saídas de comprimento variável e fazer ambos consistentemente entre idiomas. Sem os ganhos de eficiência descritos neste post, a clonagem de voz gratuita em escala de produção exigiria subsidiar uma carga de trabalho estruturalmente cara. Com eles, não exige.

Três otimizações importam especificamente para a clonagem de voz:

O FP8 preserva o condicionamento do falante. A validação de correção exata de tokens — que detecta corrupção no nível de logit — valida diretamente que a quantização não degrada o sinal de embedding do falante. A consistência do falante em saídas clonadas corresponde à linha de base bf16.

O loteamento contínuo lida com tipos de solicitação mistos. O tráfego de clonagem de voz em produção mistura solicitações condicionadas por referência e não condicionadas, variando comprimentos de saída e idiomas. O loteamento contínuo preenche o lote de decodificação independentemente do tipo de solicitação — não há penalidade pela heterogeneidade da carga de trabalho.

O escalonamento de throughput de 52× torna viável a geração em massa. Com 8.006 tok/s em uma única H200, gerar grandes bibliotecas de áudio com vozes clonadas — audiolivros, diálogos de jogos, conteúdo localizado em escala — é economicamente viável dentro do nível gratuito.

O nível gratuito inclui clonagem de voz porque otimizamos nosso caminho para poder custeá-la. Nós a incluímos porque esse sempre foi o produto — e o trabalho de engenharia descrito aqui é o que nos permite manter essa promessa à medida que o uso escala. Para integrar a clonagem de voz em fluxos de trabalho de agentes, veja nosso suporte a MCP e habilidades de agente.

Clone uma voz em menos de 60 segundos → Teste grátis


Infraestrutura de GPU: Sendo Dono do Stack

Hardware e Aquisição

Nosso cluster de GPU opera aproximadamente 500 placas em vários data centers. A topologia multi-DC foi uma decisão de aquisição antes de ser uma decisão de confiabilidade: o fornecimento e o preço das GPUs são voláteis, e o bloqueio de um único fornecedor significa absorver essa volatilidade diretamente. O fornecimento multi-fornecedor e multi-DC protege contra riscos de preço e restrições de fornecimento simultaneamente, ao custo da complexidade operacional.

Para inferência, operamos uma frota mista. A H200 SXM5 lida com o serviço de produção de alta concorrência, onde o throughput agregado bsgemm FP8 domina. A RTX 5090 e a RTX 6000 PRO (sm_120a) atendem aos endpoints de borda — em c=64, a 5090 mxfp8 atinge 5.869 tok/s, aproximadamente 71% do throughput da H200 bsgemm a um custo de hardware substancialmente menor por placa.

A implantação sm_120a exigiu uma correção não óbvia: o limite original de cuda_graph_max_bs = 24 para GPUs de 32GB produziu uma queda severa de throughput em alta concorrência — c=32 caiu para ~31 tok/s/req, c=64 para ~35 tok/s/req. Elevar o limite para min(max_running_requests, 64) recuperou a curva total de throughput. O problema subjacente: a captura do gráfico CUDA em bs=24 estava deixando a GPU subutilizada nos tamanhos de lote de decodificação que realmente aparecem em c=32+.

Agendamento de GPU: Eliminando a Capacidade Ociosa

Diagrama antes e depois mostrando a linha do tempo e a barra de utilização da GPU. Antes: os trabalhos de inferência deixam ~50% de lacunas ociosas. Depois: os trabalhos de inferência, treinamento e limpeza de dados preenchem a utilização para ~90%+

A utilização de GPU de referência em um cluster apenas de inferência é de aproximadamente 50%. O tráfego de inferência é inerentemente instável; a GPU fica ociosa durante as horas de folga, entre as execuções de treinamento e durante as fases de carregamento de conjuntos de dados.

Operamos dois sistemas de agendamento paralelos — Kubernetes para inferência, Slurm para treinamento — com um princípio compartilhado: trabalhos de limpeza e pré-processamento de dados funcionam como trabalho de preenchimento elástico no nível de prioridade mais baixo em ambos os clusters. Os trabalhos de limpeza ocupam a capacidade ociosa da GPU sempre que a inferência ou o treinamento não a estão usando. Eles são passíveis de checkpoint e imediatamente preemptíveis, portanto desaparecem sem custo de correção quando o trabalho real chega.

Ordem de prioridade: inferência > limpeza no cluster K8s; treinamento > limpeza no Slurm. O escalonador automático (autoscaler) no lado da inferência usa sinais de tráfego real — e não heurísticas baseadas em tempo — para que os trabalhos de limpeza sejam despejados assim que a carga aumenta.

Resultado: utilização da GPU de ~50% para ~90%+. Na escala do cluster, esse delta reduz aproximadamente pela metade o custo efetivo por solicitação de inferência — o orçamento de hardware é fixo, mas o dobro de solicitações são atendidas com ele.

Infraestrutura de Rede

Operamos nossa própria rede: aquisição direta de largura de banda de ISP, ASN, conectividade de 300Gbps e peering com a Cloudflare. Duas implicações de custo especificamente para TTS.

O egresso na escala de TTS não é trivial. Os preços de egresso dos provedores de nuvem são estruturalmente de alta margem; possuir a camada de rede remove essa margem inteiramente.

A latência é a segunda razão. Cada milissegundo de ida e volta da rede aparece no TTFB percebido pelo usuário. O peering da Cloudflare coloca os endpoints do Fish Audio próximos aos usuários roteados pela rede da Cloudflare — uma fração substancial do tráfego global de API. A implantação multi-DC significa que a maioria das solicitações atinge um nó de inferência próximo sem atravessar toda a internet pública.

Armazenamento: Arquitetura em Camadas

Dados de treinamento, checkpoints de modelo e cache de inferência possuem diferentes padrões de acesso e requisitos de custo. Usamos uma arquitetura de três camadas:

  • Hot (NVMe flash): dados de treinamento ativos, pesos de modelo para serviço
  • Warm (misto flash/HDD): checkpoints recentes, conjuntos de dados pré-processados
  • Cold (cluster HDD Ceph auto-hospedado): dados de treinamento históricos, armazenamento de longo prazo

A camada fria (cold) substituiu o armazenamento de objetos de terceiros para dados em massa. Uma camada de cache local na frente do armazenamento frio significa que as leituras repetidas — comuns em pipelines de dados de treinamento — são atendidas a partir de NVMe em vez de HDD frio.


O Resultado: O Que o Stack Produz

Diagrama antes e depois mostrando que o mesmo volume de solicitações anteriormente exigia quatro GPUs H200 com ~50% de utilização, agora atendido por uma H200 com ~90%+ de utilização após melhoria de 4× na eficiência

Em todas as camadas:

  • Kernels FP8 personalizados: 2,1–4,3× mais rápidos do que o cuBLAS padrão em formatos de decodificação
  • Loteamento contínuo: escalonamento de throughput de 52× de c=1 para c=64, aumento de latência de 37ms
  • Agendamento de GPU: utilização de ~50% → ~90%+, reduzindo aproximadamente pela metade o custo por solicitação
  • Infraestrutura própria: margem de lucro de nuvem removida da computação, rede e armazenamento

Combinado, o mesmo volume de solicitações que antes exigia quatro H200s agora roda em uma. A melhoria de eficiência de 4× é o que torna o nível gratuito economicamente viável — não um subsídio, mas uma redução estrutural de custos. O período de acesso gratuito reflete que a economia unitária funciona; consulte Preços para disponibilidade atual.


Como o Stack de Inferência do Fish Audio se Compara

Dados de infraestrutura baseados em documentação pública, repositórios do GitHub e blogs de engenharia em junho de 2026.

Fish Audio S2.1 ProElevenLabsOpenAI TTSGoogle Cloud TTS
Arquitetura de inferênciaLoteamento contínuo (baseado em sglang)Não divulgadoNão divulgadoNão divulgado
Kernels de inferência personalizados✅ fish-scales-ops (código aberto)Não divulgadoNão divulgadoNão divulgado
Quantização FP8✅ bsgemm + mxfp8Não divulgadoNão divulgadoNão divulgado
Infraestrutura de GPUPrópria, ~500 placas, multi-DCHospedada em nuvemPrópria (Azure)Própria (TPU)
Stack de serviço de código aberto✅ Parcial (fish-scales-ops)
Benchmarks de throughput publicados✅ 8.006 tok/s em c=64 (H200)Não publicadoNão publicadoNão publicado

O padrão é consistente: Fish Audio é o único grande provedor de TTS que documentou publicamente sua arquitetura de inferência, abriu o código de sua biblioteca de kernels e publicou números concretos de throughput. "Não divulgado" não é uma crítica — é uma observação sobre o que é verificável. Para uma avaliação independente da qualidade da voz entre provedores, veja nossa comparação cega de provedores de TTS.


O Que é Código Aberto

A fish-scales-ops está disponível agora: GEMM FP8 e FlashAttention para Hopper e Blackwell, nível de produção, segura para captura de Gráfico CUDA.

Se você está construindo infraestrutura de inferência para modelos autorregressivos em H200 ou RTX 5090/6000 PRO, a lacuna de desempenho no formato de decodificação em relação às bibliotecas padrão é real e os kernels estão lá para fechá-la.

O que há na biblioteca:

  • GEMM FP8: bsgemm (1×128 act × 128×128 wgt) para Hopper; MXFP8 1×32 (OCP UE8M0) para Blackwell
  • MXFP8 FlashAttention para sm_120a: pré-preenchimento contíguo, pré-preenchimento paginado (extend), decodificação paginada com GQA nativo via transmissão K/V stride-0
  • Segura para captura de Gráfico CUDA em tudo

O Que Vem a Seguir

O suporte ao B300 está no roteiro. Os núcleos tensores FP8 nativos e a largura de banda NVLink 5 no Blackwell levarão a curva de throughput ainda mais longe.

A otimização da inferência continua. Os números de benchmark congelados são um portão de regressão, não um alvo. Cada ponto de concorrência é algo a ser superado.

Mais partes do stack de serviço são candidatas a código aberto à medida que se estabilizam — as modificações do sglang_lite, a lógica de loteamento específica do DualAR, o manuseio do gráfico CUDA sm_120a. A infraestrutura que torna o nível gratuito sustentável é a mesma infraestrutura sobre a qual gostaríamos que a comunidade construísse.


Introdução à API de TTS Gratuita

String do modelo: s2.1-pro-free. Uma mudança de cabeçalho em relação a qualquer chamada de API do Fish Audio existente.

python

import httpx

body = {
    "text": "Olá, mundo!",
    "reference_id": "seu_id_de_modelo",
    "format": "mp3",
}

with httpx.Client() as client:
    res = client.post(
        "https://api.fish.audio/v1/tts",
        headers={
            "Authorization": "Bearer <SUA_CHAVE_DE_API>",
            "Content-Type": "application/json",
            "model": "s2.1-pro-free",
        },
        json=body,
    )

res.raise_for_status()

with open("output.mp3", "wb") as f:
    f.write(res.content)

JavaScript

import { writeFile } from "fs/promises";

const body = {
  text: "Olá, mundo!",
  reference_id: "seu_id_de_modelo",
  format: "mp3",
};

const res = await fetch("https://api.fish.audio/v1/tts", {
  method: "POST",
  headers: {
    Authorization: "Bearer <SUA_CHAVE_DE_API>",
    "Content-Type": "application/json",
    model: "s2.1-pro-free",
  },
  body: JSON.stringify(body),
});

if (!res.ok) {
  throw new Error(`Solicitação de TTS falhou: ${res.status} ${await res.text()}`);
}

const buffer = Buffer.from(await res.arrayBuffer());
await writeFile("output.mp3", buffer);

83 idiomas. Sem limite rígido de uso. Sem cartão de crédito. Clonagem de voz incluída.

Todas as outras APIs de TTS de última geração cobram desde o primeiro token. O S2.1 Pro não.

Clone uma voz em menos de 60 segundos →

Documentação Completa da API →

Perguntas Frequentes

O que é loteamento contínuo e por que ele importa para o custo do TTS?
O loteamento contínuo (continuous batching) mantém o loop de decodificação da GPU em execução sem esperar que um lote completo seja concluído. No loteamento estático, uma única solicitação lenta atrasa todas as outras solicitações no lote — a GPU fica ociosa até que a sequência mais lenta termine. O loteamento contínuo adiciona novas solicitações ao lote de decodificação ativo à medida que as vagas são liberadas, mantendo a utilização da GPU alta, independentemente da variação do comprimento da saída. Para TTS especificamente, onde o comprimento da saída varia significativamente entre as solicitações (uma frase curta vs. um parágrafo), a diferença de utilização entre o loteamento estático e o contínuo é substancial.
Por que a quantização FP8 não degrada a qualidade da voz?
A quantização FP8 reduz a precisão numérica das representações de peso de 16 bits para 8 bits, o que pode introduzir regressões de qualidade se aplicada sem validação cuidadosa. Nossa validação executa dois portões em cada implantação: uma verificação de correção exata de tokens (a decodificação gananciosa quantizada deve corresponder à bf16 token por token nos primeiros cinco frames de áudio de uma entrada de referência fixa) e um portão de regressão de throughput (o throughput de decodificação deve permanecer dentro de 5% da linha de base congelada em cada ponto de concorrência). A verificação exata de tokens detecta a corrupção no nível de logit diretamente — se a quantização estiver degradando as distribuições de probabilidade do modelo, isso aparecerá imediatamente em entradas determinísticas. O S2.1 Pro Free usa pesos de modelo idênticos ao nível pago; a quantização ocorre apenas na camada de serviço.
Como a inferência em lote afeta a latência para solicitações individuais?
Em c=64 versus c=1, o TTFB aumenta de 73ms para 110ms — uma diferença de 37ms. Para a maioria das cargas de trabalho de produção, esse delta é imperceptível. A troca é explícita: 52× mais throughput agregado para 37ms de latência adicional por solicitação. Para aplicações sensíveis à latência, como agentes de voz, está disponível um endpoint em tempo real separado com uma arquitetura otimizada para TTFA sobre o throughput — o pré-preenchimento é retirado do caminho crítico totalmente na abertura da conexão, e um agendador ping-pong elimina as barreiras de host por ciclo.
O que é o fish-scales-ops e quem deve usá-lo?
O fish-scales-ops é a biblioteca de código aberto do Fish Audio de GEMM FP8 e FlashAttention para as arquiteturas NVIDIA Hopper (H200) e Blackwell (RTX 5090, RTX 6000 PRO). Ela visa os formatos de decodificação pequenos (M ≤ 128) que dominam a inferência autorregressiva — formatos para os quais bibliotecas padrão como cuBLAS e PyTorch não são otimizadas. Se você estiver executando qualquer modelo autorregressivo (TTS, LLM ou outro) em hardware H200 ou Blackwell e servindo em concorrência de baixa a média, a lacuna de desempenho no formato de decodificação em relação às bibliotecas padrão é real. A biblioteca é segura para captura de Gráfico CUDA e testada em produção na infraestrutura de serviço do Fish Audio.
Como a infraestrutura do Fish Audio difere dos provedores de TTS hospedados em nuvem?
A maioria dos provedores de TTS opera em infraestrutura de GPU gerenciada em nuvem (AWS, Azure, GCP) e repassa os preços da nuvem para os custos da API. O Fish Audio possui seu próprio cluster de GPU (~500 placas, multi-DC), infraestrutura de rede (ASN, 300Gbps, peering Cloudflare) e armazenamento (Ceph auto-hospedado). Ser dono do stack remove a margem de lucro da nuvem em todas as camadas — computação, egresso e armazenamento — o que representa uma vantagem de custo estrutural em escala. Também permite otimizações específicas de hardware (como o trabalho de gráfico CUDA sm_120a para RTX 6000 PRO) que não são possíveis em um ambiente de nuvem gerenciado.
Shijia Liao

Shijia LiaoX

Founder & Chief-Scientist of Fish Audio.

Leia mais de Shijia Liao

Crie vozes que parecem reais

Comece a gerar áudio da mais alta qualidade hoje.

Já tem uma conta? Entrar